混合MVC4アプリがあり、一部のコントローラーはの通常の実装でController
あり、一部のコントローラーはの実装ですApiController
。私もDIにAutofacを使用していますが、WebApiコントローラーの「アクティベーター」機構(より具体的な用語がないため)がAutofacリゾルバー(AutofacWebApiDependencyResolver
)を使用していないようです。これにより、リクエストを行うと例外がスローされます。私のAPIコントローラーの1つに対して。エラーは次のとおりです。
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Type 'MyApp.Areas.Api.Controllers.MyController' does not have a default constructor
</ExceptionMessage>
<ExceptionType>System.ArgumentException</ExceptionType>
<StackTrace>
at System.Linq.Expressions.Expression.New(Type type)
at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
</StackTrace>
</Error>
設定方法は次のとおりです。
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
Autofac.WebApi統合についての私の理解は、WebApiにAutofacリゾルバーを使用させるための唯一の要件は上記であるということです。では、何が起こっているのでしょうか。
補足:私が考えることができる唯一の間抜けな部分は、MVCエリアにWebApiコントローラーがあり、によってサポートされていないDefaultHttpControllerSelector
ため、カスタムコントローラーを実装していることです(Andrew Malkovに対して) 。ただし、セレクターは後でアクティブ化に使用されるタイプのみを返すため、これがリゾルバーに影響を与えるとは思いません。