MEF的ImportingConstructor的异常处理

MEFImport中,有属性导入和构造器导入两种方式,前者类似:

   1: [Import]
   2: public IMessageSender MessageSender { get; set; }

后者类似:

   1: class Program
   2: {
   3:   [ImportingConstructor]
   4:   public Program(IMessageSender messageSender) 
   5:   {
   6:      ...
   7:   }
   8: }

 

但是在ImportingConstructor的方式中,如果那个Export不存在,例如属于另外一个模块,而那个模块按需没有加载,这样在ImportingConstructor的时候就会报异常,这个异常如何捕获?

一个解决办法是用AllowDefault选项,例如下列代码,就不会报异常,而且程序中知道Import失败了:

   1: [ImportingConstructor]
   2: public OrderController([Import(AllowDefault=true)] ILogger logger) {
   3:   if(logger == null)
   4:   {
   5:     //加上你的异常处理逻辑....
   6:     //logger = new DefaultLogger();
   7:    }
   8:   _logger = logger;
   9:   //下面使用_logger都要判断是否为NULL
  10: }

 

有关如何调试和诊断MEF的问题,请参看这篇文章。

有关如何高效的使用MEF的10个方法,请参看这篇文章。

posted on 2011-10-17 10:48 Mainz 阅读(350) 评论(0) 编辑 收藏

导航

公告

统计