В настоящее время у меня есть веб-приложение .NET Core 3.1, содержащее класс Entity Framework DBContext. Во время выполнения startup.cs извлекает строку подключения и внедряет DBContext в класс repository, в котором он мне нужен. Мне нужно переместить repository и DBContext в свой собственный проект в Решении, чтобы веб-приложение могло продолжать использовать, а также другой проект консольного приложения в Решении (который будет работать как обычная серверная служба на нашем сервере ).

Мои вопросы

  1. Как внедрить DBContext (с правильной строкой подключения) и репозиторий в веб-приложение и консольное приложение?
  2. Возможно ли это (Q1) или мне просто нужно вызвать экземпляр без использования внедрения зависимостей?
  3. Как DBContext может получить строку подключения без startup.cs?
0
ALLofitsMATHS 4 Апр 2020 в 01:16

1 ответ

Одним из вариантов может быть добавление метода расширения в ваш модуль следующим образом:

    {
        public static IServiceCollection AddMyModule(this IServiceCollection services, Action<DbContextOptionsBuilder> dbSetupAction, IConfiguration config = null)
        {
           //Add all services (Dependency injections)    
            return services;
        }
    }

А затем вы можете вызвать его внутри своего основного StartUp

public void ConfigureServices(IServiceCollection services)
{
....
ervices.AddMyModule(options => options.UseSqlServer(Configuration.GetConnectionString("Default"), b => b.MigrationsAssembly("AppName")), Configuration.GetSection("MyModuleName"));
...
}

И, конечно же, вам нужно будет ссылаться на проект вашего модуля из вашего основного проекта (где находится Startup)

0
theCuriousOne 6 Апр 2020 в 18:10
Ясно, так что вы предложили мне создать контейнер для внедрения зависимостей, а затем вызывать его из каждого проекта, которому нужны внедренные службы?
 – 
ALLofitsMATHS
6 Апр 2020 в 19:56
Да. Я считаю, что это хороший способ сделать это.
 – 
theCuriousOne
7 Апр 2020 в 09:40