UOW + Репозиторий + Autofac загрузить два разных DbContext

У меня сегодня проблема, и я не могу ее решить, я много искал и не могу найти решение, пожалуйста, помогите мне, если сможете.

Я реализую приложение MVC, которое использует EF + Шаблон репозитория + Единица работы с Autofac в качестве инжектора зависимостей.

Мне удалось работать с одним классом DbContext, но я столкнулся с ситуацией, когда мне нужно использовать другой экземпляр DbContext (который обращается к другой базе данных с другими учетными данными пользователя)

Позвольте мне объяснить лучше: у меня есть EntityA, который поступает из базы данных A (и у меня есть класс DatabaseA_Context). Поэтому мне нужен EntityB, который поступает из базы данных B (с собственным классом DatabaseB_Context).

Когда я регистрирую их в AutoFac, в реализацию GenericRepository вводится только последняя настроенная зависимость.

Я уже нашел статьи о том, что Autofac переопределяет регистрацию последним значением.

Я уже нашел другую статью, в которой показано, что если я передам IEnumerable в конструкторе UnitOfWork, я смогу просмотреть все зарегистрированные типы для него, но мне нужен конкретный.

Я достаточно ясно?

Мой код ниже:

Мой контроллер:

public class MyController : Controller
{
    private readonly IBaseBLL<EntityA> _aBLL;
    private readonly IBaseBLL<EntityB> _bBll;

    public MyController(IBaseBLL<EntityA> aBLL, IBaseBLL<EntityB> bBLL)
    {
        _aBLL = aBLL;
        _bBLL = bBLL;
    }
}

Мой бизнес уровень

public interface IBaseBLL<T> where T : class
{
    T Select(Expression<Func<T, bool>> predicate);
    T AddT entity);
    void Update(T entity);
    T Delete(T entity);
}

public class BaseBLL<T> : IBaseBLL<T> where T : class
{
    private readonly IUnitOfWork _uow;

    public BaseBLL(IUnitOfWork uow)
    {
        _uow = uow;
    }

    //implementation goes here...
}

Моя реализация UOW

public interface IUnitOfWork : IDisposable
{
    int SaveChanges();
    IGenericRepository<T> Repository<T>() where T : class;
}

public class UnitOfWork : IUnitOfWork
{
    private readonly DbContext _dbContext;
    private bool disposed = false;
    private Dictionary<Type, object> repositories;


    public UnitOfWork(DbContext dbContext)
    {
        _dbContext = dbContext;
        repositories = new Dictionary<Type, object>();
    }

    public IGenericReposity<T> Repository<T>() where T : class
    {
        if (repositories.Keys.Contains(typeof(T)))
            return repositories[typeof(T)] as IGenericReposity<T>;

        IGenericReposity<T> repository = new GenericRepository<T>(_dbContext);
        repositories.Add(typeof(T), repository );
        return repository ;
    }

    public int SaveChanges()
    {
        return _dbContext.SaveChanges();
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!this.disposed)
            if (disposing)
                _dbContext.Dispose();

        this.disposed = true;
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
}

Моя реализация репозитория

public class GenericRepository<T> : IGenericRepositoryT> where T : class
{
    protected readonly DbContext _dbContext;
    protected IDbSet<T> _dbSet;

    public GenericRepository(DbContext dbContext)
    {
        _dbContext = dbContext;
        _dbSet = _dbContext.Set<T>();
    }

    //implementation goes here...
}

Моя регистрация в AutoFac (в файле Global.asax)

var builder = new ContainerBuilder();

builder.RegisterType(typeof(DatabaseA_Context)).As(typeof(DbContext)).InstancePerLifetimeScope();
builder.RegisterType(typeof(DatabaseB_Context)).As(typeof(DbContext)).InstancePerLifetimeScope();
builder.RegisterType(typeof(UnitOfWork)).As(typeof(IUnitOfWork)).InstancePerRequest(); 

Пожалуйста помоги

Ответы на вопрос(1)

Ваш ответ на вопрос