.NET Framework 2.0を対象とする2つのプロジェクトProductStore.WebとProductStore.Dataを持つC#ソリューションがあります。DbContext MVCプロジェクト外の依存性注入
次のように私は私にHomeControllerとCustomerRepositoryを持っている(私はスピードのためにHomeControllerでそれを設定した、顧客の作成は、顧客のコントローラであってもよいが、まだ足場-EDそれをします):
namespace ProductStore.Web.Controllers
{
public class HomeController : Controller
{
private readonly DatabaseContext _context;
public HomeController(DatabaseContext context)
{
_context = context;
}
public IActionResult Index()
{
ICustomerRepository<Customer> cr = new CustomerRepository(_context);
Customer customer = new Customer
{
// customer details
};
//_context.Customers.Add(customer);
int result = cr.Create(customer).Result;
return View();
}
}
}
namespace ProductStore.Data
{
public class CustomerRepository : ICustomerRepository<Customer>
{
DatabaseContext _context;
public CustomerRepository(DatabaseContext context)
{
_context = context;
}
}
}
依存性注入は_contextをコントローラ内で自動的に解決します。次に、ProductStore.DataにあるCustomerRepositoryのパラメータとしてコンテキストを渡します。
私の質問は2倍です:
- はこのベストプラクティス(コントローラからCustomerRepositoryにコンテキストを渡す)
- ない場合のベストプラクティスですが、私はどのように似た方法で
IServiceCollection services
を通してコンテキストにアクセスすることができますDatabaseContextは、アプリケーションのStartUp.csクラスのサービスに挿入されます。
コンテキストを渡す必要はないはずですが、CustomerRepositoryはコンテキストを取得する必要があります。あなたは、リポジトリ内のサービスに登録さcontext
を使用できるようにcontroller
にcontext
を渡す必要はありません
おかげ
なぜ 'context'を' repository'に直接挿入しないのですか? –
@RubenVardanyan thats私が求めていること。リポジトリ内から新しいコンテキストオブジェクトを作成することはできますが、アプリケーションサービス内にコンテキストがすでに存在する場合は、再利用する必要があると感じていますか? – Dave0504
以下の回答を参照してください –