私はそれが以前に尋ねられて答えられたことを知っています-私が尋ねている理由は、私がこの問題に対する提案された解決策をすべて試したが、それでも解決できないためです。
ASP.NET Web API 2.0プロジェクトがあります。 Autofac
、_Autofac.Mvc5
_、および_Autofac.WebApi2
_の依存関係がインストールされています。 APIコントローラーを呼び出そうとすると、次のエラーが表示されます。
タイプ「MyController」のコントローラーを作成しようとしたときにエラーが発生しました。コントローラーにパラメーターなしのパブリックコンストラクターがあることを確認してください。
_Global.asax
_には、_App_Start
_内に配置したIocConfig.Config()
の呼び出しがあります。
_public static class IocConfig
{
public static void Config()
{
var builder = new ContainerBuilder();
builder.RegisterType<MyLogger>().As<IMyLogger>();
builder.RegisterApiControllers(Assembly.GetCallingAssembly());
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
WebApiApplication.Container = builder.Build();
DependencyResolver.SetResolver(
new AutofacDependencyResolver(WebApiApplication.Container));
GlobalConfiguration.Configuration.DependencyResolver =
new AutofacWebApiDependencyResolver(WebApiApplication.Container);
}
}
_
そして、これはMyController
のコンストラクタです:
_public MyController(IMyLogger logger)
_
呼び出そうとすると、コンストラクターについて指定されたエラーが発生します。私は何が欠けていますか?
このエラーも発生しましたが、根本的な原因は、コントローラーの依存関係の1つがAutofacに正しく登録されていなかったことです。
InnerExceptionには詳細があり(私の場合はAutofac.Core.DependencyResolutionExceptionでした)、ExceptionMessageにはこの依存関係の詳細が含まれていました。以下に沿って:
「特定の登録のアクティベーション中にエラーが発生しました...パラメータ「XXXX」を解決できません
この回答 を確認してください。
WebApiコントローラーの正しいContainerBuilder()
を構成するのに役立ちます。
このようなエラーの解決策を探している場合、まずDependencyResolverの設定を確認する必要があります。
私は同じ問題に直面しましたが、問題はAPIではなくMVCコントローラーのContainerBuilder()
オブジェクトにAutofacコードサンプルを使用していたことです。
両方のタイプのコントローラー(MVCおよびApi)を登録するための私のコード:
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly()); //Register MVC Controllers
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); //Register WebApi Controllers
builder.RegisterType<Type>().As<IType>();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); //Set the MVC DependencyResolver
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver((IContainer)container); //Set the WebApi DependencyResolver
Assembly.GetCallingAssembly()
は、型が定義されているアセンブリではなく、呼び出し元のアセンブリを返します。
_
Assembly.GetCallingAssembly
_ Method
現在実行中のメソッドを呼び出したメソッドのアセンブリを返します。
動作させるには、typeof(IocConfig).Assembly
または_Assembly.GetExecutingAssembly
_を使用する必要があります
アプリの開始コードでautofacを登録していないと思います。
これを使って:
protected void Application_Start()
{
IocConfig.Config();
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
詳細については、このブログを参照してください http://www.codeproject.com/Articles/808894/IoC-in-ASP-NET-MVC-using-Autofac