如何创建EntryAssembly中的类型的实例

时间:2018-04-02 19:41:52

标签: c# generics reflection .net-assembly activator

我有一个.dll文件,我想导入我的项目,下面是一个属于.dll的类

我能够获得解决方案的DbContext的名称,但是在下一行 当我尝试获取它的类型时,它是null。这是可以理解的,因为该解决方案中不存在所需的类型。但在这种情况下是否可以创建类型和实例?

非常感谢任何帮助,谢谢!

static class EntityBase
{
public static DbContext MyCreateNewDbContextInstance()
    {
        string myDbContextName = Assembly.GetEntryAssembly().DefinedTypes
            .Where(t => typeof(DbContext).IsAssignableFrom(t)).ToList().First().FullName;

        Type type = Type.GetType(myDbContextName);

        var context = Activator.CreateInstance(type, false);

        return (DbContext)context;
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用初始LINQ查询获取Type对象,而不是检索类型,然后从名称重新检索它:

Type type = Assembly.GetEntryAssembly()
    .DefinedTypes
    .Where(t => typeof(DbContext).IsAssignableFrom(t))
    .FirstOrDefault();
object res = null;
if (type != null) {
    res = Activator.CreateInstance(type, false);
}
return (DbContext)res;