我正在尝试在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();
}
我错过了什么?
答案 0 :(得分:4)
您是否在域中加载了定义类型T的程序集? (在尝试实例化类型之前,您需要在AppDomain中加载适当的程序集及其依赖项)。尝试实例化mscorlib或system中定义的类型,看看是否存在问题。
答案 1 :(得分:0)
嗯... 我认为MaLio是对的。 另外我建议你在每个域中使用IoC,比如AutoFac。 有了它,你甚至可以为一个班级注册工厂。或不同的生命周期。 我不喜欢,你有第一手的物体,然后把它作为一个字符串传递。必须有更好的方法。