使用MEF宿主在一个应用程序上,这个应用程序创建一个CompositionContainer的实例,并往容器内添加Composable Parts。
以下是使用宿主的步骤。
- 创建一个宿主类。在示例中,我们使用控制台应用来做宿主。
- 添加System.ComponentModle.Composition引用。
- 添加一个Compose()方法,用来创建容器实例和组合宿主。
- 添加一个Run()方法,调用Compose()方法。
- 在Main()方法中,调用宿主类。
using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.Reflection; using System; public class Program { public static void Main(string[] args) { Program p = new Program(); p.Run(); } public void Run() { Compose(); } private void Compose() { var container = new CompositionContainer(); container.ComposeParts(this); } }
6.定义一个或多个Exports,这些Exports将被Import到宿主中。
public interface IMessageSender { void Send(string message); } [Export(typeof(IMessageSender))] public class EmailSender : IMessageSender { public void Send(string message) { Console.WriteLine(message); } }
7.在宿主中添加属性并打Import标志。
[Import] public IMessageSender MessageSender { get; set; }
8.有两种方式将组件(Parts)添加到容器中。
一、直接将组件(Parts)添加到容器内。
private void Compose() { var container = new CompositionContainer(); container.ComposeParts(this, new EmailSender()); }
二、通过程序集目录添加。
private void Compose() { var catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()); var container = new CompositionContainer(catalog); container.ComposeParts(this); }
上面的步骤完成后,代码如下:
using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.Reflection; using System; public class Program { [Import] public IMessageSender MessageSender { get; set; } public static void Main(string[] args) { Program p = new Program(); p.Run(); } public void Run() { Compose(); MessageSender.Send("Message Sent"); } private void Compose() { AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var container = new CompositionContainer(catalog); container.ComposeParts(this); } } public interface IMessageSender { void Send(string message); } [Export(typeof(IMessageSender))] public class EmailSender : IMessageSender { public void Send(string message) { Console.WriteLine(message); } }
想查看更详细信息,请点击这里。