我有這個相對簡單的程序:在F#重複MEF導出定義
open System
open System.ComponentModel.Composition
open System.ComponentModel.Composition.Hosting
open System.Reflection
module Config =
[<Export("Timer.Delay")>]
let Delay = TimeSpan.FromSeconds(5.0)
[<EntryPoint>]
let main argv =
let catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly())
let container = new CompositionContainer(catalog)
let delay = container.GetExportedValue<TimeSpan> "Timer.Delay"
printfn "Delay: %A" delay
但我得到調用container.GetExportedValue<TimeSpan> "Timer.Delay"
此錯誤:
不止一個出口被發現,約束相匹配:
合同名稱 &thinsp; Timer.Delay
RequiredTypeIdentity System.TimeSpan
檢查的catalog.Parts
收集,我看到兩個部分,各自具有單個ExportDefinition
。第一個Program+Config
,我希望找到,一個用於<StartupCode$Remote>.$Program
(注意是集名稱爲Remote
):
結束語在module Program
的main
功能不改變這種行爲,也沒有將這些模塊分成不同的文件。有人知道爲什麼這個F#程序正在生成第二個導出定義嗎?我怎樣才能防止這種情況?