Mef Prism v4 - [导入] vs [ImportingConstructor]

时间:2012-01-26 16:43:32

标签: c# prism mef prism-4

当使用MEF和Prism v4时,做[Import]的推荐方法是什么?这两个调用之间有什么区别(如果有的话)?

选项1:

public class TestClass
{
    [Import]
    private IRegionManager _RegionManager;

    public TestClass()
    {
        // stuff here
    }
}

选项2:

public class TestClass
{
    private IRegionManager _RegionManager;

    [ImportingConstructor]
    public TestClass(IRegionManger regionManager)
    {
        this._RegionManager = regionManager;
        // stuff here
    }
}

这些之间有什么区别?推荐哪个?

2 个答案:

答案 0 :(得分:2)

这是一个风格问题,但我在ImportingConstructor上比Import更忠实于领域。 ImportingConstructor允许您定义一个既可以使用也可以不使用MEF的对象。合同清晰,程序员很好理解。

另一方面,使用Import可以让您的课程在MEF中更加实用。开发人员习惯于将对象的依赖关系提供给构造函数,而不是查看对象的所有属性,并确定在构造之后需要设置哪些属性。

答案 1 :(得分:2)

使用[ImportingConstructor],您可以在构造函数中访问导入。使用[导入],您可以在IPartImportsSatisfiedNotification.OnImportsSatisfied()

保存访问您的导入

我建议[ImportingConstructor]并且公共字段应该是私有的:)