1

如何根据路由参数加载服务依赖项?

我的要求不同,但我会尝试使用一个简单的示例。用户可以选择运输提供商(UPS、Fedex...),并且该信息是请求模型或路线的一部分。根据路由,我需要加载服务类。

如何在 Autofac OWIN 中完成?对此的帮助将不胜感激

4

1 回答 1

1

当您使用 Autofac 的 OWIN 集成时,每个请求都会创建一个新的生命周期范围,在该范围内IOwinContext注册当前,如您在此处看到的。

然后,您可以将服务的创建委托给依赖于IOwinContext.

public class MyServiceFactory
{
    private readonly IOwinContext _context;

    public MyServiceFactory(IOwinContext context)
    {
        _context = context;
    }

    public IService Create()
    {
        // inspect the context and determine which service you need
        // you could return, dependending on, let's say, the URL
        //  - UpsService()
        //  - FedexService()
    }
}

您需要确保的一件事是您注册您的工厂,InstancePerLifetimeScope因为IOwinContext每个请求都会有所不同。

但是,您需要在 OWIN 层工作吗?它会让事情变得更难,并且可能有点hacky,因为OWIN实际上只是HTTP层,所以没有路由数据之类的东西。

HttpRequestMessage如果您使用 ASP.NET Web API,如果您使用RegisterHttpRequestMessage扩展方法,则可以将工厂基于当前。
然后,您可以通过 访问路线数据request.GetRequestContext().RouteData。请注意,这GetRequestContext是命名空间中的扩展方法System.Net.Http

如果你使用 ASP.NET MVC,你可以AutofacWebTypesModule在容器中注册,它本身在容器中注册了相当多的类型。
其中之一是HttpRequestContext具有RouteData属性,因此您可以将其注入工厂并应用您的逻辑。

于 2016-12-13T06:00:22.610 回答