Unity Framework - повторное использование экземпляра - PullRequest
6 голосов
/ 10 марта 2010

никто не любил мой первый вопрос по этому поводу: Создание объектов Entity Framework с шаблоном Unity for Unit of Work / Repository

так что мне удалось перефразировать это что-то, что вы можете прочитать, не засыпая / не теряя воли к жизни.

Я создаю объект 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 (фактически контекст данных Entity Framework), один для конструктора DataAccessLayer, один для конструктора DemoRepository

Поскольку это для шаблона «Единица работы», очень важно, чтобы тот же экземпляр использовался повторно. Есть идеи? Я вижу, что подобные вопросы были заданы ранее, но не приняты

1 Ответ

7 голосов
/ 10 марта 2010

Вы можете указать Unity использовать ContainerControlledLifetimeManager :

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

В качестве альтернативы вы можете использовать RegisterInstance вместо RegisterType, хотя вы должны создать его во время регистрации:

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