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