Unity Framework - повторное использование экземпляра
Никто не любил мой первый вопрос по этому поводу: создание объектов 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
Так как это для шаблона Unit of Work, очень важно, чтобы тот же экземпляр использовался повторно. Есть идеи? Я вижу, подобные вопросы были заданы ранее, но не приняты
1 ответ
Вы можете указать Unity использовать ContainerControlledLifetimeManager:
container.RegisterType<IUnitOfWork, communergyEntities>(new ContainerControlledLifetimeManager());
Вы также можете использовать RegisterInstance
вместо RegisterType
, хотя вы должны создать его во время регистрации:
container.RegisterInstance<IUnitOfWork>(new CommunergyEntities());