【问题标题】:Mef Prism v4 - [Import] vs [ImportingConstructor]Mef Prism v4 - [Import] 与 [ImportingConstructor]
【发布时间】:2012-01-26 16:43:32
【问题描述】:

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

选项 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
    }
}

它们之间有什么区别?推荐哪个?

【问题讨论】:

    标签: c# prism mef prism-4


    【解决方案1】:

    这是一个风格问题,但我更喜欢 ImportingConstructor,而不是 Import 在字段上。 ImportingConstructor 允许您定义一个在有和没有 MEF 支持的情况下都可用的对象。合同很清楚,程序员也很好理解。

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

    【讨论】:

    • 好的,谢谢,我在我的代码中混合和匹配,并意识到我应该去[ImportingConstructor][Import]。猜猜并没有太大的差异,只有棱镜或 MEF 样式。去看看有没有其他人有一些cmets,如果没有,我会把你的标记为答案:)
    【解决方案2】:

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

    我会推荐 [ImportingConstructor] 并且顺便说一下,公共字段应该是私有的 :)

    【讨论】:

    • 感谢您的信息,是的,在我的实际程序中,它们是私有的,但让我为任何发现它并提出相同问题的人更改帖子。那么使用 [Import],它们将不会在构造函数中可用?加载 Lazy 时有什么不同吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多