我正在开发一个发票申请表。
我正在使用MEF
来采用模块化方法。
我已经创建了一个用于打印的模块(PlugIn),它将文档打印到打印机。
现在,我的问题是
一旦用户添加(保存)销售,就会有一个名为Sales的类。我需要检查是否安装了Printing模块,如果是,那么我需要使用该模块将此Sales传递给Printer。
我没有得到,我怎么能实现这一点。
我的想法是,我会在我的Sales类中使用[Import(typeof(IPrint))]
作为属性,如果我对此属性有一些价值,那么我会将文档发送到打印机。
是否有更好的方法来满足这一要求。
答案 0 :(得分:1)
我不确定你是如何实施课程的。尝试这样的事情:
//in your Metadata you should have bool FireOnSave
public class Sales
{
IEnumerable<Lazy<T, TMetadata>> myPlugins;
private static CompositionContainer _container;
static Sales()
{
var catalog = new AggregateCatalog();
var d = new DirectoryInfo(".\\");
catalog.Catalogs.Add(new DirectoryCatalog(d.FullName));
_container = new CompositionContainer(catalog);
}
void ImportPlugins()
{
myPlugins = _container.GetExports<T, TMetadata>();
}
public void Save()
{
//do your saving work here
fire_plugins();
}
private void fire_plugins()
{
foreach (var m in myPlugins)
{
if (m.Metadata.FireOnSave)
m.Value.Invoke();
}
}
}
如果您有任何疑问,请与我们联系。