У меня есть реализация Web API в ASP.NET Core, и я хотел бы использовать включенное внедрение зависимостей. Кроме того, у меня есть сборки с поздним связыванием, где мне нужно загрузить Type и создать его экземпляр, который может иметь зависимости от основного приложения.
Я пытаюсь загрузить динамические ресурсы из сборок, которых я не знаюво время запуска. Поэтому я использую Assembly.Load("name")
и ищу фабричные типы, которые дают мне реализацию ассемблера для чтения ресурсов. Итак, я знаю тип, который мне нужен для создания экземпляра, но я не могу зарегистрировать его в IServiceCollection и, следовательно, не могу создать экземпляры с помощью ServiceProvider.
Поэтому я попытался зарегистрировать мои найденные типы в IServiceCollection, которая была предоставленапо рамкам. Для чего я зарегистрировал ServiceCollection внутри себя.
// Within Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IServiceCollection>(services);
}
// A service to register new dependencies later on
public class ServiceRegistrationService : IServiceRegistrationService
{
public IServiceCollection Services { get; }
public IServiceRegistrationService RegisterSelfTransient(Type type)
{
Services.AddTransient(type);
return this;
}
}
После вызова этого метода, например:
ServiceRegistrationService.RegisterSelfTransient(typeof(MyConcreteType));
Я бы ожидал, что IServiceProvider разрешит новый экземпляр моего типа. Можно ли зарегистрировать услуги после выхода из метода ConfigureServices(IServiceCollection services)
?