MEF宿主应用程序
在应用程序中宿主MEF
Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,他的特点如下:
1、.net下的一个可扩展行管理框架,包括了依赖注入和Duck Typing。
2、 轻松应对应用程序扩展并且对已有代码产生最小影响。
3、 应用程序和扩展程序之间不产生直接依赖,多个同样需求共享扩展程序。
参照http://mef.codeplex.com上面的教程尝试实现了一个示例
实现的步骤如下:
1、创建一个wpf的Console Application,宿主就是Program class
2、添加System.ComponentModel.Composition程序集和相关引用
3、添加一个Compone()方法,创建组合容器
4、添加一个方法,调用Compone()方法
5、在Main方法里实例化宿主
6、定义在宿主中导出的部件
7、在宿主中导出部件
8、添加部件到容器,方法有二
1.直接添加组合部件实例
2.使用目录添加组合部件
实现代码:
using System;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
namespace MEFConsole
{
/// <summary>
/// 宿主
/// </summary>
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.Run1();
p.Run2();
}
/// <summary>
/// 导入
/// </summary>
[Import]
public IWaiter waiter { get; set; }
/// <summary>
/// 实例化组合容器
/// 直接添加部件
/// </summary>
private void Compone1()
{
var container = new CompositionContainer();
container.ComposeParts(this, new Waiter());
}
/// <summary>
/// 测试直接添加部件方法
/// </summary>
public void Run1()
{
Console.WriteLine("直接添加部件到容器方式:");
Compone1();
waiter.Welcome();
waiter.Serve("糖醋里脊");
waiter.GoodBye();
Console.WriteLine();
//Console.Read();
}
/// <summary>
/// 实例化组合容器类
/// 通过目录添加部件
/// </summary>
private void Compone2()
{
var catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
var container2 = new CompositionContainer(catalog);
container2.ComposeParts(this);
}
/// <summary>
/// 测试通过目录添加控件
/// </summary>
public void Run2()
{
Console.WriteLine("通过目录添加部件到容器方式:");
Compone2();
waiter.Welcome();
waiter.Serve("糖醋里脊");
waiter.GoodBye();
Console.Read();
}
}
/// <summary>
/// 声明服务员接口
/// </summary>
public interface IWaiter
{
void Welcome();
void Serve(string name);
void GoodBye();
}
/// <summary>
/// 服务员类
/// 标记为导出
/// </summary>
[Export(typeof(IWaiter))]
public class Waiter : IWaiter
{
public void Welcome()
{
Console.WriteLine("欢迎光临!");
}
public void Serve(string name)
{
Console.WriteLine("先生您点的菜" + name + "来了,请慢用!");
}
public void GoodBye()
{
Console.WriteLine("欢迎下次光临!");
}
}
}
执行结果:

浙公网安备 33010602011771号