Asp.net mvc 3 将Autofac与ASP.NET Web API RC和ASP.NET MVC3一起使用时出错

Asp.net mvc 3 将Autofac与ASP.NET Web API RC和ASP.NET MVC3一起使用时出错,asp.net-mvc-3,asp.net-web-api,autofac,Asp.net Mvc 3,Asp.net Web Api,Autofac,我使用NuGet将ASP.NET Web API RC添加到我的MVC3项目中: Install-Package AspNetWebApi 然后我配置了它。在Global.asax.cs中: // configure regular controllers var configuration = GlobalConfiguration.Configuration; var container = Bootstrapper.ConfigureContainer(configuration); c

我使用NuGet将ASP.NET Web API RC添加到我的MVC3项目中:

Install-Package AspNetWebApi
然后我配置了它。在
Global.asax.cs
中:

// configure regular controllers
var configuration = GlobalConfiguration.Configuration;
var container = Bootstrapper.ConfigureContainer(configuration);
containterProvider = new ContainerProvider(container);
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

// Set the dependency resolver implementation for Web API.
var resolver = new AutofacWebApiDependencyResolver(container);
configuration.DependencyResolver = resolver;
Boostrapper.ConfigureContainer(…)
中,我添加了:

// I register my types as InstancePerLifetimeScope() 
// but I also tried .InstancePerHttpRequest().InstancePerApiRequest()
// to the same end
builder.RegisterType<SomeService>()
    .AsImplementedInterfaces().InstancePerLifetimeScope();
// Register API controllers using assembly scanning.
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterWebApiFilterProvider(config);
将此程序集用作我的参考后,
ApiController
开始工作,但常规的
控制器
仅在单个控制器操作调用时工作正常。当视图调用Html.RenderAction(…)时,当我刷新或导航到另一个控制器操作时,它会崩溃,并出现以下错误:

从请求实例的作用域中看不到标记与“AutofacWebRequest”匹配的作用域。这通常表示在web集成下,SingleInstance()组件(或类似场景)请求根据HTTP请求注册的组件始终从DependencyResolver.Current或ILifetimeScopeProvider.RequestLifetime请求依赖项,而不是从容器本身


我认为从最新的源代码构建针对Mvc3的Autofac.Mvc4版本2.6.2.859可能会有所帮助,但我找不到这方面的源代码。或者这里可能出了什么问题?

我发现了问题。我还使用了
Autofac.Integration.Web
将依赖项注入到自定义成员资格和角色提供程序中。但是在
WebLiftime.cs
中有这样一行:

public static readonly object Request = "httpRequest";
一旦我把它改成:

public static readonly object Request = "AutofacWebRequest";
使用构建的程序集,一切正常,没有错误:)


我相信这个常量值应该与所有项目中的值相同,
Autofac.Integration.Web
Autofac.Integration.Mvc
和“
Autofac.Integration.WebApi
”对于Mvc4,所以这应该是一个bug。

我发现了问题。我还使用了
Autofac.Integration.Web
将依赖项注入到自定义成员资格和角色提供程序中。但是在
WebLiftime.cs
中有这样一行:

public static readonly object Request = "httpRequest";
一旦我把它改成:

public static readonly object Request = "AutofacWebRequest";
使用构建的程序集,一切正常,没有错误:)


我相信这个常量值应该与所有项目中的值相同,
Autofac.Integration.Web
Autofac.Integration.Mvc
和“
Autofac.Integration.WebApi
”对于Mvc4,所以这应该是一个bug。

感谢您对这个问题的反馈。对于实际的MVC4和WebAPI版本,这些生存期范围标记都是相同的。早期的集成版本实际上只针对MVC4,因为现在大多数人都在玩MVC4。当将MVC4与autofac.integration.web+autofac.integration.MVC(4)版本2.6.2.859一起使用时,我也会遇到同样的错误。我可以在code.google上看到上面的常量仍然不同。在WebLifitetime.cs中有“httpRequest”,在RequestLifetimeScopeProvider中有“AutofacWebRequest”。这个错误还没有被纠正吗?谢谢你回复这个问题。对于实际的MVC4和WebAPI版本,这些生存期范围标记都是相同的。早期的集成版本实际上只针对MVC4,因为现在大多数人都在玩MVC4。当将MVC4与autofac.integration.web+autofac.integration.MVC(4)版本2.6.2.859一起使用时,我也会遇到同样的错误。我可以在code.google上看到上面的常量仍然不同。在WebLifitetime.cs中有“httpRequest”,在RequestLifetimeScopeProvider中有“AutofacWebRequest”。这个错误还没有被纠正吗?