0

ここでは、このリンクを参考にして使用しました。だから私はUnityActionFilterProviderクラスを追加したリンクあたりとしてAuthorisationFilterのUnity DI WebApi

https://unity.codeplex.com/discussions/446780

public class UnityActionFilterProvider : ActionDescriptorFilterProvider, IFilterProvider 
{ 
    private readonly IUnityContainer container; 

    public UnityActionFilterProvider(IUnityContainer container) 
    { 
     this.container = container; 
    } 

    public new IEnumerable<FilterInfo> GetFilters(HttpConfiguration configuration, HttpActionDescriptor actionDescriptor) 
    { 
     var filters = base.GetFilters(configuration, actionDescriptor); 

     foreach (var filter in filters) 
     { 
      container.BuildUp(filter.Instance.GetType(), filter.Instance); 
     } 

     return filters; 
    } 
} 

と私はその後、私のUnityConfig.csに

私はその後、

public void Configuration(IAppBuilder app) 
    { 
     HttpConfiguration = new HttpConfiguration(); 

     LoggingConfig.RegisterLogger(); 

     ConfigureOAuth(app); 

     var unityContainer = UnityConfig.GetConfiguredContainer(); 

     HttpConfiguration.DependencyResolver = new UnityDependencyResolver(unityContainer); 

     //for DI in the filters 
     UnityConfig.RegisterFilterProviders(unityContainer); 

     AreaRegistration.RegisterAllAreas(); 

     WebApiConfig.Register(HttpConfiguration); 
     app.UseCors(CorsOptions.AllowAll); 
     app.UseWebApi(HttpConfiguration); 
    } 

最後に、私は次のフィルタ(注を持っている私のStartup.csに呼び出す

  public static void RegisterFilterProviders(IUnityContainer UnityDependencyResolver) 
    { 
     var providers = GlobalConfiguration.Configuration.Services.GetFilterProviders().ToList(); 

     GlobalConfiguration.Configuration.Services.Add(
      typeof(IFilterProvider), 
      new UnityActionFilterProvider(UnityDependencyResolver)); 

     var defaultprovider = providers.First(p => p is ActionDescriptorFilterProvider); 

     GlobalConfiguration.Configuration.Services.Remove(typeof(IFilterProvider), defaultprovider); 
    } 

を追加しました:私はこれがActionFilterとしてこれが差をつけたかどうかを見るために試してみた)

public class HasPermissionAttribute : AuthorizationFilterAttribute 
{ 
    [Dependency] 
    public UserPermissionService UserService { get; set; } 


    public override void OnAuthorization(HttpActionContext actionContext) 
    { 

    } 

} 

しかし、これがヒットしている場合、UserServiceはnullですか?ここで私が間違ってやっていることに関するアイデアはどうですか?

答えて

1

これはいつか誰かを助けることを望みます。

基本的には、私はAPIでOAuthを使用していたという事実に至りました。

したがって、私は設定がフィルタで渡されたことを確認するだけで、startup.csを次のように編集する必要がありました。

 HttpConfiguration = new HttpConfiguration(); 

     LoggingConfig.RegisterLogger(); 

     ConfigureOAuth(app); 

     var unityContainer = UnityConfig.GetConfiguredContainer(); 

     HttpConfiguration.DependencyResolver = new UnityDependencyResolver(unityContainer); 

     //for DI in the filters 
     UnityConfig.RegisterFilterProviders(unityContainer, HttpConfiguration); 

ここで、登録は簡単に受け入れられる。

public static void RegisterFilterProviders(IUnityContainer UnityDependencyResolver, HttpConfiguration configuration) 
    { 
     var providers = configuration.Services.GetFilterProviders().ToList(); 

     configuration.Services.Add(
      typeof(IFilterProvider), 
      new UnityActionFilterProvider(UnityDependencyResolver)); 

     var defaultprovider = providers.First(p => p is ActionDescriptorFilterProvider); 

     configuration.Services.Remove(typeof(IFilterProvider), defaultprovider); 
    } 
関連する問題