HttpListener の Owin 実装からこのメソッドを使用したいと思います。
public static IDisposable Create(AppFunc app, IDictionary<string, object> properties)
AppFunc には次のような署名があります。
IDictionnary<string,Object> -> Task
タスクを作成したかったのですが、アクションが必要で、F# でそれを行う方法がわかりませんでした。私がこれまでに管理した最善の方法は、この質問のコードを使用することでした:
module CsharpAction
open System
type Wrapper<'T>(f:'T -> unit) =
member x.Invoke(a:'T) = f a
let makeAction (typ:Type) (f:'T -> unit) =
let actionType = typedefof<Action<_>>.MakeGenericType(typ)
let wrapperType = typedefof<Wrapper<_>>.MakeGenericType(typ)
let wrapped = Wrapper<_>(f)
Delegate.CreateDelegate(actionType, wrapped, wrapped.GetType().GetMethod("Invoke"))
program.fs
let yymmdd1 (date:DateTime) = date.ToString("yy.MM.dd")
let printSuccess = fun() -> printfn "Success %s" (yymmdd1 DateTime.Now )
let actionTask = CsharpAction.makeAction (typeof<string>) (printSuccess)
let mutable properties = Dictionary(dict [("fooKey", new Object())])
let server = OwinServerFactory.Create((fun (props) -> new Task(actionTask)) , properties)
しかし、それは私に教えてくれます:この式は型アクションを持つことが期待されていましたが、ここには型デリゲートがあります
F# から C# コードにアクションを与える必要がありますか? または、アクションの代わりにデリゲートを待機するなど、f# にいくつかの機能を追加するために、c# コードで作業する必要がありますか?
私は自分の知識の限界をいじっていて、痛みを感じています. 確かに、私は多くのことを学ばなければなりませんが、最初のステップを登るのを手伝ってくれれば...