MEF的ImportingConstructor的异常处理
在MEF的Import中,有属性导入和构造器导入两种方式,前者类似:
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个方法,请参看这篇文章。
