Зарегистрируйте сервисы от контроллера в среде выполнения .net - PullRequest
0 голосов
/ 10 июля 2019

В моем проекте я загружаю несколько сборок dll, и эти сборки содержат контроллеры, а также сервисы, которые нужно добавить в наш DI-контейнер.

Я пытался найти решения в течение нескольких дней, используя DI-ядро Dotnet по умолчанию или Autofac, но безрезультатно.

Я понимаю, что не рекомендуется обновлять DI во время выполнения, но я надеюсь, что смогу найти хорошее решение.

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

Пример моего кода

public class ServiceFactory : IServiceProvider
{
    public static IServiceCollection services { get; set; }
    public static IServiceProvider serviceProvider { get; private set; }
    static ServiceFactory()
    {
        services = new ServiceCollection();
        serviceProvider = services.BuildServiceProvider();
    }
    public static void ConfigureServices(IServiceCollection _services)
    {
        services = _services;
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }
    public static void Register()
    {
        services.AddTransient<IRepo, Repo>();
    }
    public static void Update()
    {
        serviceProvider = services.BuildServiceProvider();
    }
    public object GetService(Type serviceType)
    {
        return serviceProvider.GetService(serviceType);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...