C# 解析OWIN回调委托内部
解析OWIN回调委托中的对象的正确方法是什么 假设C# 解析OWIN回调委托内部,c#,dependency-injection,autofac,C#,Dependency Injection,Autofac,解析OWIN回调委托中的对象的正确方法是什么 假设AutofacConfig.AutofacContainer是一个IContainer,并且IServiceManager已注册为InstancePerRequest: app.UseCookieAuthentication(new CookieAuthenticationOptions { Provider = new CookieAuthenticationProvider { OnResponseSignIn
AutofacConfig.AutofacContainer
是一个IContainer
,并且IServiceManager
已注册为InstancePerRequest
:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
Provider = new CookieAuthenticationProvider
{
OnResponseSignIn = cookieSignInCtx =>
{
// this?
using (var scope = AutofacConfig.AutofacContainer.BeginLifetimeScope("AutofacWebRequest"))
{
var serviceManager = scope.Resolve<IServiceManager>();
}
// or this?
var serviceManager = DependencyResolver.Current.GetService<IServiceManager>();
// or something else?
}
}
});
app.UseCookieAuthentication(新的CookieAuthenticationOptions
{
Provider=新CookieAuthenticationProvider
{
OnResponseSignIn=cookieSignInCtx=>
{
//这个?
使用(var scope=AutofacConfig.AutofacContainer.BeginLifetimeScope(“AutofacWebRequest”))
{
var serviceManager=scope.Resolve();
}
//还是这个?
var serviceManager=DependencyResolver.Current.GetService();
//还是别的什么?
}
}
});
我们不是为您解决问题,而是解决了IOAuthorizationServerProvider提供程序。类似的(如果不是相同的)想法;)
常量字符串publicClientId=“self”;
var prod=container.Resolve(新名称参数(“publicClientId”,publicClientId));
var oAuthOptions=新的OAuthorizationServerOptions
{
TokenEndpointPath=新路径字符串(“/Token”),
Provider=prod,
AuthorizeEndpointPath=新路径字符串(“/api/Account/ExternalLogin”),
AccessTokenExpireTimeSpan=TimeSpan.FromDays(14),
AllowInsecureHttp=true
};
提供商的注册方式如下:
containerBuilder.RegisterInstance(new IdentityFactoryOptions<ApplicationUserManager>
{
DataProtectionProvider = new DpapiDataProtectionProvider("MyWebAPI")
});
containerBuilder.RegisterInstance(新标识工厂选项
{
DataProtectionProvider=新的DpapiDataProtectionProvider(“MyWebAPI”)
});
containerBuilder.RegisterInstance(new IdentityFactoryOptions<ApplicationUserManager>
{
DataProtectionProvider = new DpapiDataProtectionProvider("MyWebAPI")
});