【发布时间】:2014-08-09 14:52:13
【问题描述】:
我将 AutoFac 3.5 与 WebApi Integration 3.3 和 Asp.Identity 2.0.1 结合使用。问题是当我将 MyDbContext 指定为 InstancePerRequest 时,Asp.Net 身份存在问题。然后我得到了这种错误信息:
从请求实例的范围中看不到带有与“AutofacWebRequest”匹配的标记的范围。这通常表明注册为 per-HTTP 请求的组件正在由 SingleInstance() 组件(或类似场景)请求。在 Web 集成下,始终从 DependencyResolver.Current 或 ILifetimeScopeProvider.RequestLifetime 请求依赖项,而不是从容器本身.
我正在像这样注册 Asp 令牌提供程序:
public partial class Startup
{
static Startup()
{
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/token"),
RefreshTokenProvider = (IAuthenticationTokenProvider)GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IAuthenticationTokenProvider)),
Provider = (IOAuthAuthorizationServerProvider)GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IOAuthAuthorizationServerProvider)),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromHours(1),
AllowInsecureHttp = true
};
}
public void ConfigureAuth(IAppBuilder app)
{
app.UseOAuthBearerTokens(OAuthOptions);
}
}
AutoFac 部分如下所示:
builder.RegisterType<MyDbContext>().As<DbContext>().InstancePerRequest();
builder.RegisterType<SimpleRefreshToken>().As<IAuthenticationTokenProvider>();
builder.Register(x => new ApplicationOAuthProvider(
"self",
x.Resolve<Func<UserManager<User>>>()).As<IOAuthAuthorizationServerProvider>();
有人解决了这个问题吗?我找到了这个旧帖子ASP.net Identity, IoC and sharing DbContext
编辑
还有这篇博客文章,其中包含一个凌乱的解决方法http://blogs.msdn.com/b/webdev/archive/2014/02/12/per-request-lifetime-management-for-usermanager-class-in-asp-net-identity.aspx
【问题讨论】:
标签: asp.net asp.net-web-api autofac asp.net-identity