Используя Ninject DI, я реализовал два интерфейса, которые я создаю из своих MVC-контроллеров. Например:Ссылка на общий экземпляр из конструктора DI
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
?
Да, это сработало отлично, я не понял, что .InRequestScope() эффективно создает один объект, на который ссылаются все конструкторы. Спасибо за вашу помощь. – Neilski
Нет проблем. Рад, что смог помочь :) – levelnis