如何在AppDomain中使用构造函数参数创建对象? (.NET 3.5)

时间:2010-07-16 03:58:32

标签: c# .net .net-3.5

我正在尝试在AppDomain中创建一个对象实例 使用下面的代码,我得到一个例外“类型未解析为成员”

以下是代码:

private  T GetInstance<T>(AppDomain domain, params object[] constructorArguments)
{
    string assemblyName = Assembly.GetAssembly(typeof (T)).FullName;
    string typeName = typeof (T).FullName;

    //also tried this for no-argument constructors
    //var objectHandle = domain.CreateInstance(assemblyName, typeName );

    var objectHandle = domain.CreateInstance(assemblyName, typeName, false
        , BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.Instance
        , null, constructorArguments, null, null, null);

    //This call fails with the exception: "Type is not resolved for member"
    return (T) objectHandle.Unwrap();
}

我错过了什么?

2 个答案:

答案 0 :(得分:4)

您是否在域中加载了定义类型T的程序集? (在尝试实例化类型之前,您需要在AppDomain中加载适当的程序集及其依赖项)。尝试实例化mscorlib或system中定义的类型,看看是否存在问题。

答案 1 :(得分:0)

嗯... 我认为MaLio是对的。 另外我建议你在每个域中使用IoC,比如AutoFac。 有了它,你甚至可以为一个班级注册工厂。或不同的生命周期。 我不喜欢,你有第一手的物体,然后把它作为一个字符串传递。必须有更好的方法。