我正在使用F#重新編寫C#ASP.NET Web API應用程序。我已經完成了模型和控制器,並且移至執行IDependencyResolver
的MyDependencyResolver
。F#Web API中的IDependencyResolver接口實現
我有實施GetService
方法,其簽名在C#是一個問題:
object GetService(System.Type serviceType)
所以我需要返回一個obj
並採取System.Type
作爲參數。
這是我迄今爲止在F#:
type MyDependencyResolver() =
interface System.Web.Http.Dependencies.IDependencyResolver with
member this.BeginScope() : IDependencyScope =
this :> IDependencyScope
member this.GetService(serviceType:Type) : obj =
if (serviceType = typeof<Controllers.HomeController>) then
let homeController = new Controllers.HomeController(arg1, arg2, arg3, arg4)
homeController :> obj
// ???
elif (serviceType = typeof<_>) then
null
member this.GetServices (serviceType: Type) :IEnumerable<obj> =
let x = new List<obj>()
x :> IEnumerable<obj>
member this.Dispose() =
()
所以,如果serviceType
是HomeController
型我想返回的HomeController
一個實例,如果它是任何其他類型的我想返回null。我如何在F#中做到這一點?
編輯:
GetService
方法在C#:
public object GetService(Type serviceType)
{
if (serviceType == typeof(Controllers.HomeController)){
return new Controllers.HomeController(arg1, arg2, arg3, arg4);
}
return null;
}
你是如何在C#實現中處理這個問題的? –
除非你這樣做是爲了學習F#的某種自虐行爲,否則你應該知道兩件事情:** 1。**有很多可以完成這項工作的DI容器,等等。 ** 2。** [不要使用'IDependencyResolver'用於Web API;改用'IHttpControllerActivator'](http://blog.ploeh.dk/2012/09/28/DependencyInjectionandLifetimeManagementwithASP.NETWebAPI)。從F#開始也很容易。 –
@SvenGrosen請參閱編輯 – Marta