2016-03-19 17 views
1

ValidationAttribute(Asp.Net MVC3: Set custom IServiceProvider in ValidationContext so validators can resolve services)でオートファック注入を許可するための回避策に関するSOがいくつかありますが、OWINとWebApiを使用しています可能?AutofacがWebApiとOWINのValidationAttributeに注入

他のすべての依存性注入は正常に動作しています。

DependencyResolverはOWINに取り込まれていないので、OWINが検証リクエストに対してどのように注入を処理するかの違いを読んで覚えています。 Autofac、OWIN、WebApi、ValidationAttributeが可能かどうかは誰にも分かりますか?そして、具体的な例は?

答えて

2

Autofacミドルウェアを登録してから、WebApiに拡張する必要があります。これで、OWINミドルウェア内のAutofac解像度を使用できます。

 // Register the Autofac middleware FIRST. 
     app.UseAutofacMiddleware(container); 

     // extend the autofac scope to the web api 
     app.UseAutofacWebApi(HttpConfiguration); 

この後、WebApiとOWINミドルウェアは同じ解像度のコンテキストを共有し、必要な操作を行うことができます。

あなたは、例えば、このような何か行うことができますValidationAttributeの事については

public class AppStartup 
{ 

    public void Configuration(IAppBuilder app) 
    { 
     // Get your HttpConfiguration. In OWIN, you'll create one 
     // rather than using GlobalConfiguration. 
     var config = new HttpConfiguration(); 

     //Set builder 
     var builder = new ContainerBuilder(); 

     //IoC container build 
     var container = builder.Build(); 

     app.UseAutofacMiddleware(container); 
     app.UseAutofacWebApi(HttpConfiguration); 

     WebApiConfig.Register(HttpConfiguration); 
     app.UseWebApi(HttpConfiguration); 
    } 
} 

、その後

public override bool IsValid(object value) 
    { 
     var dependencyResolver = (AutofacWebApiDependencyResolver)GlobalConfiguration.Configuration.DependencyResolver; 
     using (var lifetimeScope= dependencyResolver.BeginScope()) 
     { 
      var foo = lifetimeScope.Resolve<Foo>(); 

      // use foo 
     } 
    }