MVC3 に戻ると、ControllerFactory
(ビジネス ロジックによって抽象化された) 独自のコンテナーを使用してコントローラーをインスタンス化し、必要なサービスを渡すというカスタムがありました。
new を使用して、MVC4 で同様のものを実装しようとしていApiController
ます。
Core.DependencyResolverFactory.Resolver
を返す静的/共有メソッドがありますIDependencyResolver
。これには、多数のResolve(...)
andResolveAll(...)
メソッドとオーバーロードがあります。
だから...どうすればMVC4で同じことを実装できますか?
独自の ServiceLocator を設定しようとしましたがMicrosoft.Practices.ServiceLocation.IServiceLocator
、どのフレームワーク アセンブリにもインターフェイスが見つかりません。
基礎となるコンテナーは既に BL によって抽象化されているため、コンテナーに結び付けられることについてあまり心配していません。実際には、クラスを MVC の DI に挿入するための迅速で汚れた方法が必要なだけです。
誰かが私に良いチュートリアルを教えてもらえますか?
現時点で持っているものは....
Sub Application_Start()
...Snip...
'Suggested in the link on jrummel's answer...
GlobalConfiguration.Configuration.DependencyResolver = New WebResolver
'It fails due to DependencyResolver not being defined
'I do have a
GlobalConfiguration.Configuration.ServiceResolver = New WebResolver
'but it's read-only and it is of type System.Web.Http.Services.DependencyResolver not IDependencyResolver
End Sub
Private Class WebResolver
Implements IDependencyResolver
Private Resolver As Common.Interfaces.IDependencyResolver = Core.DependencyResolverFactory.QuickResolver
Public Function GetService(serviceType As Type) As Object Implements IDependencyResolver.GetService
Return Resolver.Resolve(serviceType)
End Function
Public Function GetServices(serviceType As Type) As IEnumerable(Of Object) Implements IDependencyResolver.GetServices
Return Resolver.ResolveAll(serviceType)
End Function
End Class