我有以下使用MEF的情况。
我通过许多模块构建我的解决方案,每个模块都存在于不同的dll中。我使用MEF作为组合我所有项目的选择。 它的工作正常,但有时我为一个模块添加一个服务类说(AppService),这个类只有自定义静态方法来处理这个特定模块的通用服务。现在在这种方法中,我需要一些已经在MEF中组成的服务。 MEF容器已经存在于邮件shell程序中。 如何参考我需要的参考。如果我使用[导入]它不起作用。 示例:
public class AppService
{
[Import]
public IService MyService {get;set;}
public static int Calc()
{
return MyService.Calc(); //My service is null
}
}
提前致谢...
答案 0 :(得分:2)
我认为你的代码确实存在一些问题。
1.你确认你的AppService
类型正在组成吗?由于你不是[Export]
,我无法看到它是如何产生的。如果您没有从容器中获取AppService
的实例,则必须手动满足导入:
var service = new AppService();
container.ComposeParts(service);
2.您的班级设计有static
方法,您尝试访问instance
属性。我假设你是出于两个原因之一而尝试这种方法。或者,您假设interface
IService
支持静态操作(他们不能),或者您正在调用支持IService
类型的扩展方法,因为第一个类型失败可疑扩展方法的参数为null:
public static int Calc(this IService service)
{
return service.Calc(); // failing perhaps?
}
如果是后一种扩展方法的情况,它会提示类似于1)的内容,您需要在实例化后确认您的AppService
类型正在被组合。
您尝试访问static
属性的instance
方法会告诉我您可能需要重新考虑您的设计,并删除static
修饰符:
public int Calc()
{
return MyService.Calc();
}
但同样,你的财产是公开的,这种方法是否可以使用? 您当前的示例甚至不应该编译,因为您尝试从静态方法访问实例属性。