Unity框架 - 重用实例

时间:2010-03-09 21:05:55

标签: .net unity-container unit-of-work

没有人喜欢我的第一个问题: Creating Entity Framework objects with Unity for Unit of Work/Repository pattern

所以我设法把它重新改写成你可以阅读而不会入睡/失去生存意愿的东西。

我正在创建一个对象DataAccessLayer,它在构造函数中包含2个接口:IUnitOfWork和IRealtimeRepository:

public DataAccessLayer(IUnitOfWork unitOfWork,
                       IRealtimeRepository realTimeRepository)
{
    this.unitOfWork = unitOfWork;
    this.realTimeRepository = realTimeRepository;
}

现在,IRealtimeRepository实现的构造函数也采用了IUnitOfWork参数:

public DemoRepository(IUnitOfWork unitOfWork)
{
    this.unitOfWork = unitOfWork;
}

在Unity容器设置中,我添加了两个实现:

container.RegisterType<IUnitOfWork, communergyEntities>();
container.RegisterType<IRealtimeRepository, DemoRepository>();

Unity会创建两个新的IUnitOfWork实例(实际上是一个Entity Framework数据上下文),一个用于DataAccessLayer构造函数,一个用于DemoRepository构造函数

由于这是针对工作单元模式,因此重用相同的实例非常重要。有任何想法吗?我之前已经问过类似的问题,但是没有被接受

1 个答案:

答案 0 :(得分:7)

您可以告诉Unity使用ContainerControlledLifetimeManager

container.RegisterType<IUnitOfWork, communergyEntities>(new ContainerControlledLifetimeManager());

或者,您可以使用RegisterInstance代替RegisterType,但您必须在注册时创建它:

container.RegisterInstance<IUnitOfWork>(new CommunergyEntities());