2016-03-04 60 views
0

我使用基於SSO的Oauth2 Token。該同步到SSO用的machineKey我的應用程序之一,在啓動CONFIGS採取波紋管:與Cors的WebApi2衝突的Unity DI DI

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     HttpConfiguration config = new HttpConfiguration(); 
     ConfigureOAuth(app); 
     WebApiConfig.Register(config); 
     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
     app.UseWebApi(config); 
    } 

    private void ConfigureOAuth(IAppBuilder app) 
    { 
     //Token Consumption 
     app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions 
     { 
     }); 
    } 
} 

然後我團結DI CONFIGS兩個MVC5和WebAPI2採取婁:

public static class UnityWebActivator 
{ 
    /// <summary>Integrates Unity when the application starts.</summary> 
    public static void Start() 
    { 
     var container = UnityConfig.GetConfiguredContainer(); 

     FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First()); 
     FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); 

     GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); 
     DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
    } 

    // TODO: Uncomment if you want to use PerRequestLifetimeManager 
    // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); 

    /// <summary>Disposes the Unity container when the application is shut down.</summary> 
    public static void Shutdown() 
    { 
     var container = UnityConfig.GetConfiguredContainer(); 
     container.Dispose(); 
    } 
} 

DI工作好與我的MVC控制器,但對於WebApi控制器不起作用。 謝謝。

回答

0

我的問題解決了。

我將webApi配置爲global.asax的application_start。然後我startup.cs代碼波紋管採取:

public void Configuration(IAppBuilder app) 
    { 
     //HttpConfiguration config = new HttpConfiguration(); 
     ConfigureOAuth(app); 
     //WebApiConfig.Register(config); 
     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
     //app.UseWebApi(config); 
    } 

和的Application_Start我的代碼波紋管採取:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 

     UnityWebActivator.Start(); 
    }