如何访问嵌套的 Unity 依赖注入创建的对象?
How to access nested Unity Dependency Injection created objects?
这是Unity的初学者问题,请见谅。
在我的 Unity 配置中,我有以下内容创建我的数据库上下文 (Entity Framework)、工作单元和存储库模式对象(来自 reverse pocos and generic repo/uow):
container
.RegisterType<IDataContextAsync, myDbContext>(
new PerRequestLifetimeManager(),
new InjectionConstructor(new object[] { connString }))
.RegisterType<IUnitOfWorkAsync, UnitOfWork>(new PerRequestLifetimeManager())
.RegisterType<IRepositoryAsync<Contact>, Repository<Contact>>()
在 Microsoft MVC 中,我的控制器注入了服务:
public myController(IContactService contactService) {
_contactService = contactService;
}
我的服务注入了存储库:
public class ContactService : Service<Contact>, IContactService
{
public ContactService( IRepositoryAsync<Contact> repository) {...}
}
一切正常,但我不确定如何在控制器中访问 Unity 创建的工作单元对象以保存更改:UnitOfWork.SaveChangesAsync()
没有 DI,创建对象的方法如下:
IRepositoryProvider repoProvider = new RepositoryProvider( new RepositoryFactories());
IDataContextAsync context = new MyDbContext();
IUnitOfWorkAsync uow = new UnitOfWork(context, repoProvider);
IRepositoryAsync contactRepo = new Repository<Contact>(context, uow);
... // database changes
uow.SaveChangesAsync(); // In the Controller
显而易见的事情是在 Controller 构造函数中引用 UOW,但是 Unity 如何将同一对象用于服务,而服务将如何将它用于存储库?
你已经解决了你自己的问题...
您的 UnitOfWork class 已在 PerRequestLifetimeManager 中注册。此生命周期将确保无论何时在同一个 MVC 请求中解析 UOW,您都将收到同一个实例。因此,您将自动获得传递给控制器构造函数的相同 UOW 实例,因为您将传递给存储库构造函数。
这是Unity的初学者问题,请见谅。
在我的 Unity 配置中,我有以下内容创建我的数据库上下文 (Entity Framework)、工作单元和存储库模式对象(来自 reverse pocos and generic repo/uow):
container
.RegisterType<IDataContextAsync, myDbContext>(
new PerRequestLifetimeManager(),
new InjectionConstructor(new object[] { connString }))
.RegisterType<IUnitOfWorkAsync, UnitOfWork>(new PerRequestLifetimeManager())
.RegisterType<IRepositoryAsync<Contact>, Repository<Contact>>()
在 Microsoft MVC 中,我的控制器注入了服务:
public myController(IContactService contactService) {
_contactService = contactService;
}
我的服务注入了存储库:
public class ContactService : Service<Contact>, IContactService
{
public ContactService( IRepositoryAsync<Contact> repository) {...}
}
一切正常,但我不确定如何在控制器中访问 Unity 创建的工作单元对象以保存更改:UnitOfWork.SaveChangesAsync()
没有 DI,创建对象的方法如下:
IRepositoryProvider repoProvider = new RepositoryProvider( new RepositoryFactories());
IDataContextAsync context = new MyDbContext();
IUnitOfWorkAsync uow = new UnitOfWork(context, repoProvider);
IRepositoryAsync contactRepo = new Repository<Contact>(context, uow);
... // database changes
uow.SaveChangesAsync(); // In the Controller
显而易见的事情是在 Controller 构造函数中引用 UOW,但是 Unity 如何将同一对象用于服务,而服务将如何将它用于存储库?
你已经解决了你自己的问题...
您的 UnitOfWork class 已在 PerRequestLifetimeManager 中注册。此生命周期将确保无论何时在同一个 MVC 请求中解析 UOW,您都将收到同一个实例。因此,您将自动获得传递给控制器构造函数的相同 UOW 实例,因为您将传递给存储库构造函数。