Я установил пакет Topshelf.FSharp, и есть пример того, как использовать его здесь:Topshelf, Owin selfhost, F # и явные поля
https://gist.github.com/haf/4252121
Часть примера определяет " Svc»(услуга) класса, как это:
type Svc() =
member x.Start() =
printfn "Started"
member x.Stop() =
printfn "Stopped"
с Owin selfhost вы называете один из различных статических перегрузках IDisposable WebApp.Start(...)
для запуска веб-сервера, а затем утилизировать его, чтобы остановить его. В C#, если вы хотите комбинировать Topshelf и Owin, вы можете сохранить IDisposable результат Start() в частном локальном поле класса Svc, когда вызывается Start(), а затем вызывается Dispose() на нем в Stop ().
В F # вы можете объявить унифицированное поле типа IDisposable, используя «явные поля» (http://msdn.microsoft.com/en-us/library/dd469494.aspx), но это кажется несколько неудобным, есть ли лучший способ?
Я думаю, что «idempotent» вы имеете в виду идемпотент даже в том случае, называется «остановка»? В противном случае, если я использую ленивое поле, а кто-то вызывает старт, то остановитесь, а затем начните снова, второй вызов начать ничего не сделает, потому что ленивое значение уже было принудительно? – junichiro
Да, это то, что я имел в виду (несколько смутно) от «идемпотента». Однако теперь я заменил «idempotent» на «перезагружаемый», что более важно. –