6

没有人喜欢我关于这个的第一个问题: 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 创建了 2 个新的 IUnitOfWork 实例(实际上是一个实体框架数据上下文),一个用于 DataAccessLayer 构造函数,一个用于 DemoRepository 构造函数

由于这适用于工作单元模式,因此重用相同的实例非常重要。有任何想法吗?我看到以前有人问过类似的问题,但没有被接受

4

1 回答 1

7

您可以告诉 Unity 使用ContainerControlledLifetimeManager

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

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

container.RegisterInstance<IUnitOfWork>(new CommunergyEntities());
于 2010-03-09T21:11:40.870 回答