代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.ComponentModel.Composition;
6 using System.ComponentModel.Composition.Hosting;
7
8 namespace meftest001
9 {
10 class Program
11 {
12 static void Main( string[] args)
13 {
14 var demo = new DemoOne();
15 demo.Run( " 1 ");
16 Console.WriteLine( " ---- ");
17 demo.Run( " 2 ");
18 Console.ReadLine();
19 }
20 }
21
22 ///
23 /// 公用的 组装 处理
24 ///
25 public abstract class BassClass
26 {
27 public BassClass()
28 {
29 var catalog = new AggregateCatalog();
30 catalog.Catalogs.Add( new AssemblyCatalog( typeof(Program).Assembly));
31 var _container = new CompositionContainer(catalog);
32 _container.ComposeParts( this);
33 }
34 }
35 public interface DemoOneInterface
36 {
37 void Send( string msg);
38 }
39
40 ///
41 /// 导入
42 ///
43 public class DemoOne : BassClass
44 {
45 [ImportMany( " lyb ")]
46 IEnumerable
47 public void Run( string type)
48 {
49 foreach ( var _do in DOlist.Where(item => item.Metadata.Depict == type))
50 {
51 _do.Value.Send( " DemoOne.Send ");
52 }
53 }
54 }
55 ///
56 /// 导出
57 ///
58 [Export( " lyb ", typeof(DemoOneInterface))]
59 [ExportMetadata( " Depict ", " 1 ")]
60 public class DemoOneInherit1 : DemoOneInterface
61 {
62 public void Send( string msg)
63 {
64 Console.WriteLine( " DemoOneInherit1 send{0} ", msg);
65 }
66 }
67
68 ///
69 /// 导出
70 ///
71 [Export( " lyb ", typeof(DemoOneInterface))]
72 [ExportMetadata( " Depict ", " 2 ")]
73 public class DemoOneInherit2 : DemoOneInterface
74 {
75 public void Send( string msg)
76 {
77 Console.WriteLine( " DemoOneInherit2 send{0} ", msg);
78 }
79 }
80 ///
81 /// 定义 Metadata
82 ///
83 public interface DemoOneInterfaceDepict
84 {
85 string Depict { get; }
86 }
87 }
http://www.developcls.com/qa/1795d18c9ce344deb99915557494befd.html