以我的前一篇

MEF编程-【2.使用自定义导出特性(Using a Custom Export Attribute)】

来做比较,最简单的方式就是

******/注释部分去除,直接[Export(typeof(ICard))]/

    [Export(typeof(ICard))]
  //[ExportCardAttribute(CardType = \"BankOfChina\")]
    public class ZHCard:ICard
    {
        public double Money { get; set; }
        public string GetCountInfo()
        {
            return \"Bank Of China\";
        }

        public void SaveMoney(double money)
        {
            this.Money += money;
        }

        public void CheckOutMoney(double money)
        {
            this.Money -= money;
        }
    }

如何导入使用

[ImportMany(typeof(ICard))]
public IEnumerable<ICard> cards { get; set; }

 其他贴码(注入),

private void Compose()
{
    var catalog = new DirectoryCatalog(\"Cards\");
    var container = new CompositionContainer(catalog);
    container.ComposeParts(this);
}

这里要说明一下 var catalog = new DirectoryCatalog(\"Cards\"),跟之前的注入方式不一样,它是通过地址去找依赖目录注入。

简明的说法就是:应用我们接口的实现类的DLL,通过DLL注入。这里我再截2张图大家一看就明白了

\"\"

再看一张,本地磁盘目录情况

\"\"

好了,调用。。。。。。。。。

 Program pro = new Program();
 pro.Compose();
            
 foreach (var c in pro.cards)
 {
     Console.WriteLine(c.GetCountInfo());
 }
            

 

收藏 打印