我的Silverlight 4应用程序中有以下场景:
public class TheViewModel
{
[Import()]
public TheChild Child { get; set; }
}
[Export()]
public class TheChild
{
[ImportingConstructor()]
public TheChild(String myName, IAmTheService service) { ... }
}
[Export(typeof(IAmTheService))]
public class TheService : IAmTheService
{
public void DoSomething(String theName);
}
如您所见,TheChild的构造函数需要一个导入的参数和一个上下文相关的静态值(必须由父级提供)。字符串值不能来自AppSettings,配置等,只能由父类的当前实例提供(在本例中为TheViewModel)。
作为一个经验法则,我总是按照以下方式接近依赖注入:
" myName"参数是必需的,所以我宁愿通过构造函数设置它,但考虑到MEF的工作方式,我意识到这可能需要改变。
您能告诉我您是如何处理这种情况以及您对解决方案背后的想法吗?
答案 0 :(得分:1)
您可以与[ImportingConstructor]
一起指定特定的导入合同。例如:
[Export()]
public class TheChild
{
[ImportingConstructor()]
public TheChild([Import("MyName")] String myName, IAmTheService service) { ... }
鉴于此,将需要导出用[Export("MyName")]
装饰的字符串并用于实现依赖性。任何[Import]
规范都适用于这种情况(即:按类型导入子类,按名称导入等)。