在没有程序集名称的另一个域中创建类型的实例

时间:2014-09-17 07:05:13

标签: c# reflection

如何在不需要存储在硬盘驱动器上的程序集的情况下在另一个域中创建类型的实例。我的程序集需要一些预处理来加载内存,我不能使用它们的名称来创建实例。

例如,我无法使用此代码,因为它从硬盘加载程序集并且我的程序集不处于正常模式:

MyType t = _domain.CreateInstanceAndUnwrap("AssemblyName", myType.FullName) as MyType;

1 个答案:

答案 0 :(得分:1)

尝试此方法...(使用System.Linq)

    public static Object GetInstanceFrom(AppDomain domain, string typeFullName)
    {
        Object objectInstance = null;

        var myAssembly = domain.GetAssemblies().Where(w => w.GetTypes().Select(s => s.FullName.ToUpperInvariant()).Contains(typeFullName.ToUpperInvariant())).FirstOrDefault();

        if (myAssembly != null)
        {
            var myTypeFromAssembly = myAssembly.GetTypes().Where(w => w.FullName.ToUpperInvariant() == typeFullName.ToUpperInvariant()).FirstOrDefault();
            if (myTypeFromAssembly != null)
            {
                objectInstance = System.Activator.CreateInstance(myTypeFromAssembly);
            }
        }

        return objectInstance;
    }