动态地在类中添加打印功能

时间:2013-04-16 20:41:17

标签: c# .net wpf mef

我正在开发一个发票申请表。

我正在使用MEF来采用模块化方法。

我已经创建了一个用于打印的模块(PlugIn),它将文档打印到打印机。

现在,我的问题是

一旦用户添加(保存)销售,就会有一个名为Sales的类。我需要检查是否安装了Printing模块,如果是,那么我需要使用该模块将此Sales传递给Printer。

我没有得到,我怎么能实现这一点。

我的想法是,我会在我的Sales类中使用[Import(typeof(IPrint))]作为属性,如果我对此属性有一些价值,那么我会将文档发送到打印机。

是否有更好的方法来满足这一要求。

1 个答案:

答案 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();
        }
    }
}

如果您有任何疑问,请与我们联系。