这是Unity的初学者问题,请原谅我。如何访问嵌套的Unity依赖注入创建的对象?
在我的统一配置我有一个创建我的数据库环境(实体框架),工作单位,以及库模式对象(从reverse pocos和generic repo/uow)以下:
container
.RegisterType<IDataContextAsync, myDbContext>(
new PerRequestLifetimeManager(),
new InjectionConstructor(new object[] { connString }))
.RegisterType<IUnitOfWorkAsync, UnitOfWork>(new PerRequestLifetimeManager())
.RegisterType<IRepositoryAsync<Contact>, Repository<Contact>>()
在微软MVC,我控制器注射服务:
public myController(IContactService contactService) {
_contactService = contactService;
}
我的服务与存储库注入:
public class ContactService : Service<Contact>, IContactService
{
public ContactService(IRepositoryAsync<Contact> repository) {...}
}
一切都运行良好,但我不知道如何访问团结创建工作单元对象在控制器保存更改: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如何将同一对象用于服务,以及服务如何将其用于存储库?
我认为最好让控制员不要忘记有一个工作单元的事实。这使得控制器更简单,并防止错误,因为有人忘了保存工作单元。所以最好把这个责任转移到使用过的服务上,或者更好的做法是用装饰器来包装服务,这些服务器会自动提交uow。这个例子可以在这里看到(https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91)。 – Steven
相关:https://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request-why – Steven
@Steven因此,如果我们有服务句柄保存更改,服务如何获得链接到相同的UOW对象引用的对象而不是自己创建这些对象? –