Tob*_*ans 6 .net unity-container unit-of-work
没有人喜欢我的第一个问题: 使用Unity for Work of Work/Repository模式创建Entity Framework对象
所以我设法把它改写成你可以阅读而不会入睡/失去生存意愿的东西.
我正在创建一个对象DataAccessLayer,它在构造函数中有2个接口:IUnitOfWork和IRealtimeRepository:
public DataAccessLayer(IUnitOfWork unitOfWork,
IRealtimeRepository realTimeRepository)
{
this.unitOfWork = unitOfWork;
this.realTimeRepository = realTimeRepository;
}
Run Code Online (Sandbox Code Playgroud)
现在,实现IRealtimeRepository的构造函数也接受IUnitOfWork参数:
public DemoRepository(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
Run Code Online (Sandbox Code Playgroud)
在Unity容器设置中,我然后添加两个实现:
container.RegisterType<IUnitOfWork, communergyEntities>();
container.RegisterType<IRealtimeRepository, DemoRepository>();
Run Code Online (Sandbox Code Playgroud)
会发生什么是Unity创建2个新的IUnitOfWork实例(实际上是一个实体框架数据上下文),一个用于DataAccessLayer构造函数,一个用于DemoRepository构造函数
由于这是针对工作单元模式,因此重用相同的实例非常重要.有任何想法吗?我之前已经问过类似的问题,但是没有被接受
您可以告诉Unity使用ContainerControlledLifetimeManager:
container.RegisterType<IUnitOfWork, communergyEntities>(new ContainerControlledLifetimeManager());
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用RegisterInstance而不是RegisterType,但您必须在注册时创建它:
container.RegisterInstance<IUnitOfWork>(new CommunergyEntities());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3590 次 |
| 最近记录: |