Autofac Web Api获取当前范围

时间:2015-07-09 15:04:49

标签: asp.net-web-api autofac

我有以下扩展方法:

public static SessionUserInfo ToSessionUserInfo(this Customer customer)
{    
    //Some logic here which need some services
}

我使用autofac与web api和owin,但因为这是一个扩展方法我不能使用Constructor注入。所以我需要从代码中的逻辑中解析服务。

通常使用MVC和Autofac.Integration.MVC我会这样做:

var scope = AutofacDependencyResolver.Current.RequestLifetimeScope;
MyService service = scope.Resolve<MyService>();

但我找不到用Web API完成同样的方法。

如何在Web Api中执行此操作?

1 个答案:

答案 0 :(得分:1)

除非您在API中使用OWIN,否则您应该在WebAPI中设置Autofac配置,这是为WebApi配置Autofac的标准方法。

包括nuget pacakge Autofac.Integration.WebApi

var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<MyType>();

var container = builder.Build();
var resolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = resolver;

如果您需要在示例中请求LifetimeScope,则可以从GlobalConfiguration请求此信息。

var scope = GlobalConfiguration.Configuration.DependencyResolver.GetRequestLifetimeScope();
MyService service = scope.Resolve<MyService>();

Autofac WebApi configuration reference