F#在主构造函数上导入构造函数

时间:2014-04-16 22:20:12

标签: f# mef

我正在使用MEF,我想在我的主要构造函数上添加ImportingConstructorAttribute。我使用以下技巧来指定ImportingConstructor,它不会破坏我的对象的封装或不变性。

[<Export>]
type IntradayEngine(logger:ILogger, dummy) =

    [<ImportingConstructor>] 
    new(logger) = 
        IntradayEngine(logger, None)

    member x.Start =
        ignore

    member x.Stop = 
        ignore

我看到的唯一其他方式是:  1.通过ImportAttribute在属性上使用属性注入(这需要使该属性可变,并且我不是属性注入的粉丝)  2.制作一个默认的&#39;主构造函数并添加另一个我添加依赖项的构造函数(允许我的对象处于我不想要的状态)

在不破坏对象的可访问性,可变性或状态的情况下,是否仍然可以执行此操作?

1 个答案:

答案 0 :(得分:8)

您可以通过将属性置于类型名称和参数之间来将属性放在主构造函数上。

[<Export>]
type IntradayEngine [<ImportingConstructor>](logger:ILogger) =

    member x.Start =
        ignore

    member x.Stop = 
        ignore