В моем проекте я загружаю несколько сборок 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);
}
}