动态地将T传递给方法

时间:2018-06-14 11:37:53

标签: c# dynamic .net-core type-parameter

我已关注this帖子为.Net Core WebAPI创建可写选项类。我使用这个类来更新我的appsettings.json文件。

我想动态创建这些可写选项类。例如,我有多个选项类,如OptionsAOptionsB等。它们可以在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时,我没有得到该方法。

0 个答案:

没有答案