托管可扩展性框架(MEF)和托管AddIn框架(MAF,又名System.AddIn)似乎完成了非常类似的任务.根据这个Stack Overflow问题,MEF是System.Addin的替代品吗?,你甚至可以同时使用两者.
你什么时候选择使用一个与另一个?在什么情况下你会选择同时使用它们?
示例控制台程序.
class Program
{
static void Main(string[] args)
{
// ... code to build dll ... not written yet ...
Assembly assembly = Assembly.LoadFile(@"C:\dyn.dll");
// don't know what or how to cast here
// looking for a better way to do next 3 lines
IRunnable r = assembly.CreateInstance("TestRunner");
if (r == null) throw new Exception("broke");
r.Run();
}
}
Run Code Online (Sandbox Code Playgroud)
我想动态构建一个程序集(.dll),然后加载程序集,实例化一个类,并调用该类的Run()方法.我应该尝试将TestRunner类转换为某些东西吗?不确定一个程序集中的类型(动态代码)如何知道我的(静态程序集/ shell应用程序)中的类型.使用几行反射代码只在一个对象上调用Run()会更好吗?该代码应该是什么样的?
更新:威廉埃德蒙森 - 见评论
我想提供一些在我的软件中创建动态可加载插件的方法.执行此操作的典型方法是使用LoadLibrary WinAPI函数加载DLL并调用GetProcAddress以获取指向该dll内的函数的指针.
我的问题是如何在C#/ .Net应用程序中动态加载插件?
Managed Extensibility Framework是System.Addin的替代品吗?或者它们是互补的吗?