2017-02-10 8 views
1

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> 
     ... 
+0

registerタグからname属性を削除します。 – Nkosi

答えて

0

The <register> Element

<register>要素は、任意の 設定ファイルの基本的なビルディングブロックです。タイプマッピングを指定し、あるタイプの注入設定を にすることができます。 名前を指定すると、タイプマッピングとしてその名前 が使用されます。名前を指定しないと、指定されたタイプのデフォルトマッピング が作成されます。各マッピングに有効期限マネージャー を指定することができます。明示的な存続時間マネージャーがタイプのために構成された でない場合、それは過渡寿命マネージャーを使用します。

したがって、web設定のregisterタグからname属性を削除することをおすすめします。

+0

シンプルズ!それを指摘してくれてありがとう。 :-) – user1443986

関連する問題