问题描述
通过Activator.CreateInstance(assemblyName,typeName).Unwrap()可以实例化一个对象。但是如何动态加载DLL,然后通过Activator.CreateInstance(assemblyName,typeName).Unwrap()来实例化一个对象呢。
解决方案
解决方案二:
Assemblyass=Assembly.LoadFrom("dllpath");
解决方案三:
Assembly.Load("程序集名").CreateInstance("类名");
解决方案四:
反射。。。。
解决方案五:
MEF,,,,
解决方案六:
其实我想说的是,被引用的DLL,或在应用程序下或(Bin)目录下的DLL,可以通过Activator.CreateInstance(assemblyName,typeName).Unwrap()来实例化。而其它目录下的DLL,即便Load到程序的当前应用程序域,依然不能用ctivator.CreateInstance(assemblyName,typeName).Unwrap()来实例化。这个是否有办法。查到一点资料:Youcannotloadassembliesfromlocationsoutsidetheprobingpathintothedefaultloadcontext.http://msdn.microsoft.com/en-us/library/dd153782.aspx还有一个方法,利用currentDomain.AssemblyResolve+=newResolveEventHandler(MyResolver);但觉得这个方法,真不是什么好办法。还不如直接复制到目录
解决方案七:
反射。最基本的用法,用过工厂模式的应该都有了解过。
解决方案八:
我知道可以通过Assembly.Load("程序集名")然后CreateInstance。但这不是我想要的。我要想的是,有没有什么在PreApplicationStart的时候LoadDLL(可能在其它目录),然后load进来的这个DLL能和直接添加引用或放到程序目录或Bin目录有同样的“效果”。可以使用Activator.CreateInstance(assemblyName,typeName).Unwrap()这个方法来实例化
解决方案九:
反射
解决方案十:
解决方案十一:
Assemblyab=assembly.LoadFrom(dllpath);Typetype=ab.GetType("Class");//method1;objectob=Activator.CreateInstance(type);//method2;objectob3=Activator.CreateInstancFrom();;