如何访问嵌套的 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 实例,因为您将传递给存储库构造函数。