Платформа Unity — повторное использование экземпляра

StackOverflow https://stackoverflow.com/questions/2412563

Вопрос

никому не понравился мой первый вопрос по этому поводу:Создание объектов Entity Framework с помощью шаблона Unity для единицы работы/репозитория

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

Я создаю объект DataAccessLayer, который принимает в конструкторе два интерфейса: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.

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

Это было полезно?

Решение

Вы можете указать Unity использовать Контейнерконтролледлайфтимеманер:

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

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

container.RegisterInstance<IUnitOfWork>(new CommunergyEntities());
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top