WebApiサービスは、ランタイムUnity構成を使用しているときに機能しますが、web.configからunity構成を使用するように変更したとき、 Controller.WebApiとunity configをweb.configで使用しているコントローラのパラメーターのないpublicコンストラクターエラー
は「タイプ の 『MyController』コントローラを作成しようとすると、エラーが発生しました。コントローラは、パラメータなし publicコンストラクタを持っていることを確認します。」
私はUnityとUnity.WebApiのnugetパッケージを使用しています。
私のRegisterComponents
メソッドは、このように見えます。
public static void RegisterComponents()
{
IUnityContainer container = new UnityContainer();
container.RegisterType<Repository.Interfaces.IRepository, DataAccess.OracleRepository>(new HierarchicalLifetimeManager());
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
web.configでxml設定を使用している場合、これを使用します。
public static void RegisterComponents()
{
IUnityContainer container = new UnityContainer().LoadConfiguration();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
web.configのユニティセクションは次のようになります。
ただし、この時点で私はURLに行くときにエラーが発生します。
公式ドキュメントを引用<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>An error occurred when trying to create a controller of type 'MyController'. Make sure that the controller has a parameterless public constructor.</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace>at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request) at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()</StackTrace>
<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>Resolution of the dependency failed, type = "GatewayService.Controllers.MyController", name = "(none)". Exception occurred while: while resolving. Exception is: InvalidOperationException - The current type, Repository.Interfaces.IRepository, is an interface and cannot be constructed. Are you missing a type mapping? ----------------------------------------------- At the time of the exception, the container was: Resolving GatewayService.Controllers.MyController,(none) Resolving parameter "respository" of constructor GatewayService.Controllers.MyController(Repository.Interfaces.IRepository respository) Resolving Repository.Interfaces.IRepository,(none)</ExceptionMessage>
<ExceptionType>Microsoft.Practices.Unity.ResolutionFailedException</ExceptionType>
...
registerタグからname属性を削除します。 – Nkosi