2015-04-08 38 views
0

解决OWIN回调委托内部对象的正确方法是什么?在OWIN回调委托内部解决

假设AutofacConfig.AutofacContainer是​​和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? 
     } 
    } 
}); 

回答

0

而不是解决你的问题,这是我们如何解决IOAuthAuthorizationServerProvider提供商。类似(如果不是相同的话)想法;)。

const string publicClientId = "self"; 
var prod = container.Resolve<IOAuthAuthorizationServerProvider>(new NamedParameter("publicClientId", publicClientId)); 

var oAuthOptions = new OAuthAuthorizationServerOptions 
{ 
    TokenEndpointPath = new PathString("/Token"), 
    Provider = prod, 
    AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"), 
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), 
    AllowInsecureHttp = true 
}; 

提供商登记这样的:

containerBuilder.RegisterInstance(new IdentityFactoryOptions<ApplicationUserManager> 
{ 
    DataProtectionProvider = new DpapiDataProtectionProvider("MyWebAPI") 
});