2016-05-06 8 views
0

WebApiコントローラでAutofacを使用しようとしています。私が持っている:ここではWebApiコントローラを使用したオートファンクション

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     AutofacConfig.Register(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 

は私AutofacConfigです:

public class AutofacConfig 
{  
    public static IContainer Container { get; private set; } 
    public static void Register() 
    { 
     var builder = new ContainerBuilder(); 
     // Register your Web API controllers. 
     builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 

     //Register repositories and services.    
     Container = builder.Build(); 
    } 
} 

それから私はDependencyResolverを設定しようとしている:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 
     config.Filters.Add(new ExceptionHandlingAttribute()); 
     var container = AutofacConfig.Container;//I have registered controllers here!!! 
     config.DependencyResolver = new AutofacWebApiDependencyResolver(container); 
    } 
} 

しかし、私が受けてる依頼中:「確認してくださいコントローラにパラメータのないpublicコンストラクタがあることを示します。

また、私はそれで何が悪いだけtutorial

のように、AutofacConfigクラスでDependencyResolverを設定しようとしましたか?

+0

私は自分のコンテナをGlobal.asaxの静的フィールドとして定義し、すべての定型文の後にインスタンス化します。 コンテナ=新しいWindsorContainer()。インストール(FromAssembly.This()); GlobalConfiguration.Configuration.DependencyResolver = new WindsorDependencyResolver(Container.Kernel); – Fran

答えて

0

エラーメッセージは、コントローラに、Autofacがあなたのために注入する方法を知らないという依存関係があることを意味します。つまり、コントローラのコンストラクタには注入する必要のある依存関係(パラメータ)がありますが、依存関係(サービス)自体はAutofacに登録されていません。

コントローラのコンストラクタコードを共有すると、登録されていない依存関係を識別することができます。

関連する問題