私は依存性注入を学び始めたばかりで、ここで立ち往生しています。
私のプロジェクトには、Entity Framework DbContext を介した WCF DataService があります。
public class MyDataService : DataService<MyDbContext>
{
protected override MyDbContext CreateDataSource()
{
// I want to use dependency injection for this
return new MyDbContext();
}
}
このクラスは、
a) IIS でホストされているため、制御できない b) で作成された統合テスト用var host = new DataServiceHost(type, new Uri[] { });
どちらも MyDbContext に異なるコンストラクターを使用します
したがって、基本的にこれでコンテキストを注入するには
protected override MyDbContext CreateDataSource()
{
INinjectModule module = ???; // -
IKernel kernel = new StandardKernel(module);
return kernel.Get<MyDbContext>();
}
問題は、この状況でのベスト プラクティスは何かということです。するべきか:
a) メイン プロジェクトとサービスの両方が使用するクラス ライブラリにモジュールを作成します。b) Ninject モジュールを保持する DataService プロジェクト内に public static 変数を作成します。c) Ninject カーネルを保持する DataService プロジェクト内に public static 変数を作成します d) 他の何か。
私は次のようなものを好むだろう
protected override MyDbContext CreateDataSource()
{
DefaultKernel.Get<MyDbContext>();
}