使用MEF宿主在一个应用程序上
2012-04-04 23:27 Oliver_Zhao 阅读(482) 评论(0) 收藏 举报使用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);
}
}
想查看更详细信息,请点击这里。
浙公网安备 33010602011771号