我已关注this帖子为.Net Core WebAPI创建可写选项类。我使用这个类来更新我的appsettings.json
文件。
我想动态创建这些可写选项类。例如,我有多个选项类,如OptionsA
,OptionsB
等。它们可以在appsettings.json
中配置,并且只应在它们存在于该文件中时注入。
到目前为止一直很好,现在我的问题是ConfigureWritable
有一个类型参数T
。我的问题是,当我的代码在OptionsA
文件中找到appsettings.json
时,如何为ConfigureWritable
方法提供类型?
这是我到目前为止所拥有的:
private void AddOptionalServices(IServiceCollection services, ServiceSettings serviceSettings)
{
foreach (var serviceSetting in serviceSettings.Services)
{
var serviceType = AppDomain.CurrentDomain.GetAssemblies().SelectMany(t => t.GetTypes()).Where(t => t.Name == serviceSetting.Name).FirstOrDefault();
var settingsType = (Type)serviceType.GetProperty("ServiceType").GetValue(serviceType, null);
services.AddSingleton(typeof(IHostedService), serviceType);
services.ConfigureWritable<settingsType>(Configuration.GetSection("")); //Problem lies here
}
}
settingsType
是从serviceType返回的属性。
编辑:根据Lasse的评论进行的第二次尝试:
private void AddOptionalServices(IServiceCollection services, ServiceSettings serviceSettings)
{
foreach (var serviceSetting in serviceSettings.Services)
{
var serviceType = AppDomain.CurrentDomain.GetAssemblies().SelectMany(t => t.GetTypes()).Where(t => t.Name == serviceSetting.Name).FirstOrDefault();
var settingsType = (Type)serviceType.GetProperty("ServiceType").GetValue(serviceType, null);
services.AddSingleton(typeof(IHostedService), serviceType);
var method = typeof(IServiceCollection).GetMethod("ConfigureWritable"); //returns null
var methods = typeof(IServiceCollection).GetMethods(); //returns empty enumeration
var generic = method.MakeGenericMethod(settingsType);
generic.Invoke(this, null);
}
}
正如您所看到的,使用GetMethod
时,我没有得到该方法。