我有以下扩展方法:
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中执行此操作?
答案 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>();