Ninject DIを使用して、MVCコントローラーからインスタンス化する2つのインターフェイスを実装しました。例えば:
public class MyController : Controller
{
private readonly IUnitOfWork _UnitOfWork;
private readonly IAssetService _AssetService;
public MyController(IUnitOfWork unitOfWork, IAssetService assetService)
{
this._UnitOfWork = unitOfWork;
this._AssetService = assetService;
}
// Controller actions etc.
}
Ninjectモジュールで、次のバインディングを作成しました。
public class DomainModule : NinjectModule
{
public override void Load()
{
Bind<IUnitOfWork>()
.To<SqlUnitOfWork>()
.InRequestScope()
.WithConstructorArgument("connectionString", "MyDb.Database");
Bind<IAssetService>()
.To<FileSystemAssetService>()
.WithConstructorArgument("rootPath", "C:\\DataStore");
}
}
IUnitOfWork
インスタンスを自分に注入したいので、これをプロパティにして、コントローラーを次のように変更するIAssetService
ことを検討しました。IAssetService
public class MyController : Controller
{
private readonly IUnitOfWork _UnitOfWork;
private readonly IAssetService _AssetService;
public MyController(IUnitOfWork unitOfWork, IAssetService assetService)
{
this._UnitOfWork = unitOfWork;
this._AssetService = assetService;
this._AssetService.UnitOfWork = this._UnitOfWork;
}
// Controller actions etc.
}
しかし、別のDI手法を使用してこれを行うためのより良い/よりクリーンな方法があるかどうか疑問に思いました-理想的にはIUnitOfWork
、AssetService
コンストラクターにを追加したいですか?