Одно приложение использует несколько реестров IoC и имеет конфликты - PullRequest
0 голосов
/ 25 октября 2018

У меня есть одно приложение, которое взаимодействует с отдельными базами данных через два отдельных UnitOfWork класса.Я использую StructureMap для создания своих классов.По отдельности каждый из них создает и работает правильно.

Однако, как только я использую оба реестра контейнеров в моем " Веб-приложении ", я получаю конфликты.Оба реестра ссылаются на один и тот же DbContext (базовый) класс из их общей структуры.Однако каждый реестр имеет свой конкретный класс DbContext (который наследуется от DbContext).

Проблема в том, что ...

  1. В тот момент, когда я использую оба реестра, последний в "победах" ... и неправильный БЕТОН *Применяется класс 1018 * Dbcontext (в первый реестр).
  2. Несколько экземпляров DbContext применяются к хранилищу ссылок.

Q: Как я могу гарантировать, что правильный CONBETE DbContext будет применен ко всему моему реестру? Q: Как я могу обеспечить ЕДИНСТВЕННУЮ ИНСТАНЦИЮ DbContext в моем реестре?

Я пробовал разные методы, но безуспешно ... спасибо за помощь.

Например ...

РЕГИСТРАЦИЯ "ОДИН" СОДЕРЖИТ:

For<DbContext>().Use<BBLDataContext>();
For<IUnitOfWork>().Use<BBLUnitOfWork>();

For(typeof(ICompositeRepository<>)).Use(typeof(DbRepository<>)).Ctor<DbContext>().Is<BBLDataContext>();
For(typeof(IRepository<>)).Use(typeof(DbRepository<>)).Ctor<DbContext>().Is<BBLDataContext>();

РЕГИСТРАЦИЯ «ДВА» СОДЕРЖИТ:

For<DbContext>().Use<WsDataContext>();
For<IUnitOfWork>().Use<WsUnitOfWork>();

For(typeof(ICompositeRepository<>)).Use(typeof(DbRepository<>)).Ctor<DbContext>().Is<WsDataContext>();
For(typeof(IRepository<>)).Use(typeof(DbRepository<>)).Ctor<DbContext>().Is<WsDataContext>();
...