DbContext в отдельном проекте библиотеки классов с внедрением зависимостей - PullRequest
1 голос
/ 20 марта 2019

В настоящее время я создаю WebAPI для школьного проекта.До этого работал с DI, но я не могу заставить его работать в текущем контексте.

для проекта Я использую несколько проектов для слоя, где мой DAL должен получить dbContext через DI.

DbContext:

public FICTIEContext(DbContextOptions<FICTIEContext> options)
        : base(options)
    {
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
        }
    }

регистр запуска:

      public void ConfigureServices(IServiceCollection services)
    {
       services.AddDbContext<FICTIEContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Database")));
    }

Вызов конструктору DAL:

public class LoginBL
{
    private LoginDAL _LoginDAL;

    public bool LoginValidation(string login, string password)
    {
        _LoginDAL = new LoginDAL(); //Gives the error. As i remember given that dependency injection works correctly it should work like this.           
        return _LoginDAL.LoginValidation(login, password); ;
    }
}

для моего DAL, который я используюпроект библиотеки классов ac # с классом, в котором у меня есть конструктор с параметром DbContext:

       private readonly FICTIEContext _Database;

    public LoginDAL(FICTIEContext database)
    {
        _Database = database;
    }

При использовании этого кода я не могу вызвать конструктор, не получив ошибок об отсутствии каких-либо параметровс вызовом в DAL.

Какая часть мне не хватает в моем решении и как я могу это исправить.

1 Ответ

2 голосов
/ 20 марта 2019

Конечно, вам нужно предоставить экземпляр FICTIEContext при создании экземпляра LoginDAL с учетом вашей текущей реализации. Вот цель использования внедрения зависимостей.

Вопрос в том, нужно ли вам на самом деле внедрение инъекций зависимостей? Я сомневаюсь. В любом случае не должно быть смысла ни в использовании, ни в тестировании класса DAL без DbContext.

В этом случае вы можете просто позволить классу DAL создать экземпляр FICTIEContext внутри. Конечно, вы также можете предоставить перегрузку конструктора, который принимает контекст, если вы хотите:

private readonly FICTIEContext _Database;

public LoginDAL()
{
    _Database = new FICTIEContext();
}

public LoginDAL(FICTIEContext database)
{
    _Database = database;
}

Тогда потребитель класса может выбрать, предоставить ли пользовательский FICTIEContext или позволить классу LoginDAL создать класс по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...