C# Autofac DI不在API控制器上工作

C# Autofac DI不在API控制器上工作,c#,asp.net-mvc-5,autofac,owin,asp.net-web-api2,C#,Asp.net Mvc 5,Autofac,Owin,Asp.net Web Api2,这件事让我很难受。我的设置使用普通MVC控制器,但不使用API控制器。我也不知道我做错了什么 这是我的容器设置 IContainer Container = null; ContainerBuilder builder = new ContainerBuilder(); builder.RegisterControllers(System.Web.Compilation.BuildManager.GetGlobalAsaxType().BaseType.Assembly).PropertiesA

这件事让我很难受。我的设置使用普通MVC控制器,但不使用API控制器。我也不知道我做错了什么

这是我的容器设置

IContainer Container = null;
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterControllers(System.Web.Compilation.BuildManager.GetGlobalAsaxType().BaseType.Assembly).PropertiesAutowired().InstancePerRequest().InstancePerDependency();
builder.RegisterApiControllers(System.Web.Compilation.BuildManager.GetGlobalAsaxType().BaseType.Assembly).PropertiesAutowired().InstancePerRequest().InstancePerDependency();
builder.RegisterModule<LoggerModule>();

builder.Register(c =>
{
    // if we don't have owin context ready then just create a new one
    if (HttpContext.Current == null || HttpContext.Current.Items["owin.Environment"] == null)
    {
        return UserManager.Create(new IdentityFactoryOptions<UserManager>(), (System.Data.Entity.DbContext)null);
    }

    return HttpContext.Current.GetOwinContext().Get<UserManager>();
 }).As<IUserManager>().InstancePerLifetimeScope();

 Container = builder.Build();
 GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(Container);
 DependencyResolver.SetResolver(new AutofacDependencyResolver(Container));
奇怪的是MVC控制器工作正常。我有一个
ILogger
IUserManager
实例。但是在我的Api控制器中,我只有一个
ILogger
实例。
IUserManager
为空

如果我愿意,我可以在Api控制器中执行此操作以获取实例

((Autofac.Integration.Mvc.AutofacDependencyResolver)System.Web.Mvc.DependencyResolver.Current).RequestLifetimeScope.Resolve<IUserManager>();
((Autofac.Integration.Mvc.AutofacDependencyResolver)System.Web.Mvc.DependencyResolver.Current).RequestLifetimeScope.Resolve();

我还可以通过使用自定义模块设置IUserManager属性(我在现有的
LoggerModule
中对此进行了测试),但我想了解为什么仅仅注册类型就无法工作。我不想在不完全了解我做错了什么的情况下继续治疗症状。

你的MVC控制器有构造函数吗?@DavidG没有,只是默认的无参数构造函数,或者说,没有注意到你在做属性自动连线!无论如何,APIController是否与MVC控制器位于同一程序集中?@DavidG是的,MVC和API控制器都位于同一程序集中,但是,配置Autofac的代码位于单独的程序集中。我的Autofac配置代码也使用
WebActivatorEx.PostApplicationStartMethod运行
((Autofac.Integration.Mvc.AutofacDependencyResolver)System.Web.Mvc.DependencyResolver.Current).RequestLifetimeScope.Resolve<IUserManager>();