2012-06-13 108 views
4

回到MVC3,我有一个自定义的ControllerFactory,它将使用我自己的容器(如我的业务逻辑抽象)来实例化控制器并将它们传递给它们所需的服务。如何在MVC4的APIController中使用我自己的依赖关系解析器

我想在MVC4中使用新的ApiController实现类似的东西。

我有一个静态/共享方法Core.DependencyResolverFactory.Resolver,它返回一个IDependencyResolver。这又有一些Resolve(...)ResolveAll(...)方法和重载。

所以...我怎样才能在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 

回答

3

的ASP.NET Web API测试版附带了自己的IDependencyResolver,独立于MVC。

有一个关于asp.net教程:Using the Web API Dependency Resolver

你可以得到ServiceLocator from NuGet

+0

谢谢,这看起来很有前途 - 现在阅读。 – Basic

+0

嗯仍然遇到问题...'GlobalConfiguration.Configuration.DependencyResolver'未定义。我有一个'... Configuration.ServiceResolver',但它是只读的(类型为'DependencyResolver'而不是'IDependencyResolver'。我也看不到'Set'方法。我将编辑我的Q以获得清晰度 – Basic

+1

好的,值得注意的是:这已经从'ServiceResolver'变成了Beta和RC之间的'DependencyResolver' - 我还在运行Beta版。感谢您的帮助 – Basic