Таким образом, я пытался получить этот простой тест, работающий в приложении # консоли F:F # и MEF: Экспорт Функции
open System.Reflection
open System.ComponentModel.Composition
open System.ComponentModel.Composition.Hosting
[<Export(typeof<int -> string>)>]
let toString(i: int) = i.ToString()
[<EntryPoint>]
let main argv =
use catalog = new AssemblyCatalog(Assembly.GetEntryAssembly())
use container = new CompositionContainer(catalog)
let myFunction = container.GetExportedValue<int -> string>()
let result = myFunction(5)
0
Я ожидал, MEF, чтобы функция должным образом решена, но это не так. Вместо этого, я получаю это:
Необработанное исключение типа
'System.ComponentModel.Composition.CompositionContractMismatchException'
произошло в System.ComponentModel.Composition.dllДополнительная информация:
Cannot cast the underlying exported value of type 'Program.toString (ContractName="Microsoft.FSharp.Core.FSharpFunc(System.Int32,System.String)")' to type 'Microsoft.FSharp.Core.FSharpFunc``2[System.Int32,System.String]'.
- Что мне здесь не хватает?
- В чем разница между
FSharpFunc(System.Int32, System.String)
иFSharpFunc``2[System.Int32, System.String]
? - Каков правильный способ импорта/экспорта функций F # через MEF?
Спасибо за ваш ответ. Я просто пытаюсь избавиться от интерфейсов. Я полагал, что для большинства моих кодов нужны только фактические функции, а не содержащие типы или любые материалы интерфейса. –
Также: вы упомянули, что это только для функций верхнего уровня, не так ли? что, если я поместил все мои '[]' ed функции как вложенные функции? –
... Арг .. Правильно. Я не могу применять атрибуты к вложенным функциям. Есть ли какая-либо MEF-подобная библиотека, которая будет играть лучше с F #, но все же сможет быть использована кодом C#? –