C# 将类型转换为T可以接受的类型

C# 将类型转换为T可以接受的类型,c#,generics,C#,Generics,我目前正在尝试创建一个简单的WebAPI框架,它本质上是“无控制器的”,但从DLL加载控制器、模态和其他内容 在启动时,框架执行以下操作 浏览插件文件夹中的DLL-得到这个 查找并调用“CacheRegistration”和“ContextRegistration”方法(相应地将类型添加到列表中)-明白了吗 (查看DLL后) 将模型类型注入OnModelCreating(然后创建数据库)-检查 遍历列表并调用cache.RegisterModel();(从服务器获取数据并将其加载到内存中) 我的

我目前正在尝试创建一个简单的WebAPI框架,它本质上是“无控制器的”,但从DLL加载控制器、模态和其他内容

在启动时,框架执行以下操作

  • 浏览插件文件夹中的DLL-得到这个
  • 查找并调用“CacheRegistration”和“ContextRegistration”方法(相应地将类型添加到列表中)-明白了吗
  • (查看DLL后)

  • 将模型类型注入
    OnModelCreating
    (然后创建数据库)-检查
  • 遍历列表并调用
    cache.RegisterModel()
    ;(从服务器获取数据并将其加载到内存中)
  • 我的问题是如何调用
    Cacher.RegisterModel
    just buy using a Type。一些文章将我指向
    Activator.CreateInstance()
    ,但我不需要实例,我需要一些可以传递到t的东西

    如果需要,可以对缓存进行折射

    编辑 在非动态系统上,EF只需完成#3的所有工作。至于#4,我将创建一个CacheConfigulator类并将所有内容转储到那里,然后从global.ascx调用它

    缓存配置器

    public static void Initialize()
    {
        Cacher<Customer>.SyncData();
        Cacher<Items>.SyncData();
        // Other models
    }
    
    publicstaticvoidinitialize()
    {
    Cacher.SyncData();
    Cacher.SyncData();
    //其他型号
    }
    
    Cacher.SyncData();
    Cacher.SyncData();
    
    如果您希望以动态方式取代此功能,那么反射(仍然)是一条路要走:

    // this comes from somewhere dynamic
    Type[] types = new Type[] { typeof(Customer), typeof(Items) };
    
    foreach (Type t in types)
    {
        var m = typeof(Cacher<>).MakeGenericType(t).GetMethod("SyncData", BindingFlags.Static);
        m.Invoke(null, null);
    }
    
    //这来自某个动态的地方
    类型[]类型=新类型[]{typeof(客户),typeof(项目)};
    foreach(类型中的类型t)
    {
    var m=typeof(Cacher.MakeGenericType(t.GetMethod)(“SyncData”,BindingFlags.Static);
    m、 调用(null,null);
    }
    
    这将遍历所有类型,获取泛型类型
    Cacher
    ,并对该类型调用静态方法
    SyncData

    Cacher.SyncData();
    Cacher.SyncData();
    
    如果您希望以动态方式取代此功能,那么反射(仍然)是一条路要走:

    // this comes from somewhere dynamic
    Type[] types = new Type[] { typeof(Customer), typeof(Items) };
    
    foreach (Type t in types)
    {
        var m = typeof(Cacher<>).MakeGenericType(t).GetMethod("SyncData", BindingFlags.Static);
        m.Invoke(null, null);
    }
    
    //这来自某个动态的地方
    类型[]类型=新类型[]{typeof(客户),typeof(项目)};
    foreach(类型中的类型t)
    {
    var m=typeof(Cacher.MakeGenericType(t.GetMethod)(“SyncData”,BindingFlags.Static);
    m、 调用(null,null);
    }
    

    这将遍历所有类型,获取泛型类型
    Cacher
    并调用该类型的静态方法
    SyncData

    请提供一个代码示例,说明如果没有动态插件系统,您将如何执行3和4,而只是在类型中进行硬编码。请提供一个代码示例,说明如果没有动态插件,您将如何执行3和4系统,而不是仅仅在类型中硬编码。