在我的应用程序中,我想在启动后注册一堆服务。
晚课:
public LateClass(IServiceCollection col)
{
col.AddTransient<IEventHandler, JsonPackageUpdated>();
}
当然还要注册 LateClass 本身:
public void ConfigureServices(IServiceCollection services)
{
col.AddTransient<LateClass>();
}
但是 IServiceCollection 会破坏我的应用程序,并且我遇到了无法解决的异常。
最佳答案
在评论中回答OP的问题应该如何处理动态配置。
您可以根据需要使 ConfigurationService 变得尽可能复杂(注入(inject)其他已注入(inject)其他内容的服务),直到它具有循环依赖关系。
using Microsoft.Extensions.DependencyInjection;
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var collection = new ServiceCollection();
collection.AddTransient<ConfigurationService>();
collection.AddTransient<EventProcessService>();
var serviceProvider = collection.BuildServiceProvider();
var eventService = serviceProvider.GetService<EventProcessService>();
eventService.ProcessEvent(0);
}
}
public class ConfigurationService
{
public ConfigurationService(
// you could use whatever configuration provider you have: db context for example
)
{
}
public string GetSettingBasedOnEventType(int eventType)
{
switch (eventType)
{
case 0:
return "Some setting value";
case 1:
return "Some other setting value";
default:
return "Not found";
}
}
}
public class EventProcessService
{
private readonly ConfigurationService configurationService;
public EventProcessService(ConfigurationService configurationService)
{
this.configurationService = configurationService;
}
public void ProcessEvent(int eventType)
{
var settingForEvent = configurationService.GetSettingBasedOnEventType(eventType);
// process event with your setting
}
}
}
关于c# - 启动后向 IServiceCollection 注册类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62052296/