C# 使用预加载的程序集执行CreateInstanceAndUnwrap()

C# 使用预加载的程序集执行CreateInstanceAndUnwrap(),c#,C#,我将ServerImporter类定义如下: public class ServerImporter : MarshalByRefObject { ... } 我还创建了一个ServerImporter的实例: AppDomain _domain = AppDomain.CreateDomain("ServerImporterDomain"); var type = typeof (ServerImporter); ServerImporter si = _domain.CreateI

我将
ServerImporter
类定义如下:

public class ServerImporter : MarshalByRefObject
{
    ...
}
我还创建了一个
ServerImporter
的实例:

AppDomain _domain = AppDomain.CreateDomain("ServerImporterDomain");
var type = typeof (ServerImporter);
ServerImporter si = _domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName) as ServerImporter;
var type = typeof (ServerImporter);
/* My custom Assembly loading (It load an assembly in current domain) */
Assembly assembly = LoadAssemblyFrom(type.Assembly.GetName().Name);
// I want to use this assembly object to do same instance creation
它工作正常。但是我已经加载了我的程序集(带有一些预处理),我想用它来创建
ServerImporter
的实例:

AppDomain _domain = AppDomain.CreateDomain("ServerImporterDomain");
var type = typeof (ServerImporter);
ServerImporter si = _domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName) as ServerImporter;
var type = typeof (ServerImporter);
/* My custom Assembly loading (It load an assembly in current domain) */
Assembly assembly = LoadAssemblyFrom(type.Assembly.GetName().Name);
// I want to use this assembly object to do same instance creation
我使用了
assembly.CreateInstance()
,但当我强制转换它时,返回
null

尝试使用

对于另一个AppDomain

ServerImporter si = (ServerImporter)Activator.CreateInstance(domain, type.Assembly.FullName, "ServerImporter");
或者不使用程序集名称,您可以尝试

ServerImporter si = (ServerImporter)Activator.CreateInstance(domain.GetAssemblies().SelectMany(x => x.GetTypes()).Where(x => x.IsEquivalentTo(typeof(ServerImporter)))[0]);

谢谢你,这很有效;但它不会在另一个域中创建实例,对吗?@alisepri.Kh是的,您可以在另一个域中使用它,我添加了一个示例。但我不能使用程序集名称:(因为我的程序集需要预处理才能加载。@alisepri.Kh我添加了一个详细的示例,请检查它是否有效,或者是否可以从appdomainYes的程序集获取类型,谢谢Sam,我从我的自定义域中加载的程序集获取类型,并由此创建一个实例。再次感谢:)