1
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 기술을 사용합니다. 이상적으로 AssetService
생성자에 IUnitOfWork
을 추가하고 싶습니다.
예,이 작업은 완벽하게 작동합니다. InRequestScope()가 모든 생성자가 참조하는 단일 개체를 효과적으로 생성한다는 사실을 깨닫지 못했습니다. 당신의 도움을 주셔서 감사합니다. – Neilski
probs 없음. 다행히 도울 수있어 :) – levelnis