我正在编写一个小插件架构,我决定使用MEF 有人告诉我,我们必须使用配置文件。
有没有使用Mef和配置文件的例子?
我需要的是如何在配置文件中设置mef这可能吗?这是我为测试它而构建的一个小的noddy示例我缺少loadPlugin函数和配置文件可以帮助
Noddy的例子
//MyCompany.Payment.Contracts.dll
public interface IPayment
{
bool Pay();
}
//MyCompany.Payment.ServiceProviderOne.dll
[Export(typeof(IPayment))]
public class ServiceProviderOne:IPayment
{
public bool Pay(return true);
}
//MyCompany.Payment.ServiceProviderTwo.dll
[Export(typeof(IPayment))]
public class ServiceProviderTwo:IPayment
{
?public bool Pay(return true);
}
//Main Console.Applicaiton
class Program
{
static void Main(string[] args)
{
HelperPlugin helperPlugin =new HelperPlugin();
List<IPayment> myLoadedPayments= helperPlugin.GetPlugins();
//blahhh conti
}
}
public cass HelperPlugin
{
[ImportMany(typeof(IPayment))]
public List<IPayment>Payments { get; set; }
public List<IPayment>GetPlugins()
{
Payments=new List<IPayment>();
LoadPlugins();
return Payments;
}
private void LoadPlugins()
{
???
}
}
配置文件它看起来像什么?
感谢您提出任何建议或代码段
答案 0 :(得分:1)
我现在正在处理类似的问题,我的方法就是:
CompositionContainer
将如何配置DirectoryCatalog
)AssemblyCatalog
来包含该程序集基本上,我正在尝试配置组成容器将用于查找部件的AggregateCatalog
个别目录。不幸的是,现在还没有 - 所以现在这只是在我脑海中 - 还没有代码。
答案 1 :(得分:1)
我在最近的一个项目中所做的是在界面中包含一个Name属性。我想要访问的所有扩展都已加载,然后配置文件设置列出了我想要使用的名称。我使用循环检查已加载的扩展,如果在设置中命名,我将它们添加到内部列表中。
我的要求是有一个特定的订单,使用扩展,所以这个解决方案对我有用。
我可以在程序集中包含元数据来完成同样的事情,但希望信息更加明显并且是合同的一部分。