首页新闻找找看学习计划

泛型类运行调用

0
[已解决问题] 解决于 2019-01-15 11:18

public class Respository<T> where T : Pager{
public int Insert(T item){}
}
类中提供了多种静态方法。

想在运行时通过类名称来调用。
应该怎么实现?

lucika.zh的主页 lucika.zh | 初学一级 | 园豆:53
提问于:2019-01-14 19:52
< >
分享
最佳答案
0

反射里面有专门处理泛型的方法.
不管是泛型方法还是泛型类.都可以传入泛型参数来调用.

        base.OnModelCreating(builder);
        var mi = builder
            .GetType()
            .GetMethods()
            .FirstOrDefault(a => 
                a.ToString() == "Microsoft.EntityFrameworkCore.ModelBuilder ApplyConfiguration[TEntity](Microsoft.EntityFrameworkCore.IEntityTypeConfiguration`1[TEntity])");
        var asm = Assembly.GetAssembly(this.GetType());
        asm.GetTypes()
            .Where(a => 
                a.GetInterfaces()
                .Any(i => i.FullName.Contains("Microsoft.EntityFrameworkCore.IEntityTypeConfiguration")))
            .Select(a =>
            {
                return new { t = a.GetInterfaces().First().GenericTypeArguments.First(), o = asm.CreateInstance(a.FullName) };
            })
            .ToList().ForEach(a =>
            {
                mi.MakeGenericMethod(a.t).Invoke(builder, new[] { a.o });
            });

这个是我写的ef core 自动解析映射配置类的方法.就是泛型反射调用

奖励园豆:5
吴瑞祥 | 高人七级 |园豆:28675 | 2019-01-14 20:28

谢谢!

lucika.zh | 园豆:53 (初学一级) | 2019-01-15 11:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册