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

F#主构造函数上的导入构造函数,f#,mef,F#,Mef,我正在使用MEF,我想在我的主构造函数上添加一个ImportingConstructorAttribute。我使用以下技巧来指定一个ImportingConstructor,它不会破坏对象的封装性或不变性 [<Export>] type IntradayEngine(logger:ILogger, dummy) = [<ImportingConstructor>] new(logger) = IntradayEngine(logger

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

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

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

    member x.Start =
        ignore

    member x.Stop = 
        ignore
[]
类型日内引擎(记录器:ILogger,虚拟)=
[] 
新(记录器)=
日内引擎(记录器,无)
成员x.开始=
忽视
成员x.停止=
忽视
我对这一点的其他看法是: 1.通过属性上的
ImportAttribute
使用属性注入(这需要使该属性可变,我不喜欢属性注入) 2.创建一个“默认”主构造函数并添加另一个构造函数,在该构造函数上添加依赖项(允许我的对象处于我不想要的状态)


在不破坏我的对象的可访问性、易变性或状态的情况下,是否仍然可以这样做

您可以通过将属性放在类型名和参数之间,将其放在主构造函数上

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

    member x.Start =
        ignore

    member x.Stop = 
        ignore
[]
类型IntradayEngine[](记录器:ILogger)=
成员x.开始=
忽视
成员x.停止=
忽视

哇,超级直观。