2011-08-31 59 views
1

我有以下的情况。添加自定义容器使用MEF来MEF

我由很多模块构建我的解决方案,在不同的dll存在的每个模块。我使用MEF作为构建我所有项目的选择。 其工作正常,但有时我添加了一个模块服务类说(AppService服务),这个类只是具有应对这一特定模块的通用服务定义静态方法。现在在这个方法中,我需要一些已经在MEF中编写的服务。 MEF容器已经存在于邮件外壳程序中。 如何才能得到我需要的参考资料。如果我使用[导入],它不起作用。 例子:

public class AppService 
{ 
    [Import] 
    public IService MyService {get;set;} 

    public static int Calc() 
    { 
     return MyService.Calc(); //My service is null 
    } 
} 

在此先感谢...

回答

2

我觉得你确实有该代码的几个问题。

1.Have您确认您的AppService类型正在由?因为你不是[Export]-它,我看不到如何生成。如果不从容器抓的AppService一个实例,你必须手动满足进口:

var service = new AppService(); 
container.ComposeParts(service); 

2.您一流的设计有一个static方法,您试图访问一个instance属性。我假设你正在尝试这个原因有两个。要么,你承担interfaceIService支持静态操作(这是他们不能),或者你拨打的支持IService类型的扩展方法,这是失败,因为涉嫌扩展方法的第一个参数为空:

public static int Calc(this IService service) 
{ 
    return service.Calc(); // failing perhaps? 
} 

如果是后者的扩展方法的情况下,它会建议类似1,你需要确认它实例化后,您AppService类型正在由东西)。

你有一个static方法试图访问一个instance属性会告诉我,你可能总有需要重新考虑你的设计,并删除static修改的事实:

public int Calc() 
{ 
    return MyService.Calc(); 
} 

但同样,你的财产是公开的,这种方法有什么用处? 你当前的例子甚至不应该编译,因为你试图从一个静态方法访问一个实例属性。