如何在 MVC3 和 WCF Web API 中为 ServiceRoute 启用依赖注入

发布于 2024-11-25 06:17:45 字数 343 浏览 3 评论 0原文

我正在创建一个 MVC3 网站,它将使用 WCF Web API 公开 REST API。

为了将路由注册到 REST API,我将代码添加到 Global.asax 中,类似于下面的代码。

routes.MapServiceRoute<RelationsService>("relations");

这工作得很好,但我需要使用 DI 方法来注入服务所依赖的依赖项。 正如您在上面的代码中看到的,MVC 框架正在创建RelationsService 的实例,但这应该由 DI 容器来完成。

有谁知道如何配置 MVC3 以便我自己的 DI 容器用于创建服务实例?

I am creating a MVC3 website that will expose a REST API using WCF Web API.

To register routes to the REST API I add code to the Global.asax similar to the code below.

routes.MapServiceRoute<RelationsService>("relations");

This works well enough but i need to use a DI approach to inject the dependencies that the Service depends on.
As you can see in the code above the MVC framework is creating the instance of the RelationsService but this should be done by the DI container.

Does anyone know how to configure MVC3 so that my own DI container is used for creating the instances of the Services?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

毁我热情 2024-12-02 06:17:45

您必须使用 IResourceFactory 创建的 IHttpHostConfigurationBuilder 来扩展当前的服务注册调用。

var configurationBuilder = HttpHostConfiguration.Create()
    .SetResourceFactory(new ResourceFactory());

routes.MapServiceRoute<RelationsService>("relations", configurationBuilder);

然后,如果您使用 StructureMap 作为首选 IoC/DI 工具,您只需在 GetInstance 方法中请求服务即可。

public class ResourceFactory : IResourceFactory
{
    public object GetInstance(Type serviceType, InstanceContext instanceContext, HttpRequestMessage request)
    {
        return ObjectFactory.GetInstance(serviceType);
    }
}

You have to extend your current service registration call with an IHttpHostConfigurationBuilder that has been created with an IResourceFactory.

var configurationBuilder = HttpHostConfiguration.Create()
    .SetResourceFactory(new ResourceFactory());

routes.MapServiceRoute<RelationsService>("relations", configurationBuilder);

Then if you for instance use StructureMap as preferred IoC/DI tool you can just ask for the service in the GetInstance method.

public class ResourceFactory : IResourceFactory
{
    public object GetInstance(Type serviceType, InstanceContext instanceContext, HttpRequestMessage request)
    {
        return ObjectFactory.GetInstance(serviceType);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文