微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.net – 如何在MVC4的APIController中使用我自己的依赖解析器

回到MVC3,我有一个自定义的ControllerFactory,它将使用我自己的容器(由我的业务逻辑抽象)来实例化控制器并传递它们所需的服务.

我正在尝试使用新的ApiController在MVC4中实现类似的东西.

我有一个静态/共享方法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

解决方法

ASP.NET Web API beta附带了自己的IDependencyResolver,与MVC分开.

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

你可以得到ServiceLocator from NuGet.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐