2016-07-07 12 views
0

私はUnity Dependency Injectionを使用しており、問題が発生しています。私はインターフェイスとクラスを次のように登録しました。Unity - 現在のタイプはインタフェースであり、構築できません。型マッピングがありませんか?

container.RegisterType<IUserService, UserService>(); 

ここで、コンテナはIUnityContainerです。私のコントローラで

私はそうのようなIUserServiceパラメータに取るコンストラクタを設定している:このコントローラーのインデックスを対象としているページ上のリンクがヒットした場合

private readonly IUserService _service; 

    public DependencyController(IUserService service) 
    { 
     _service = service; 
    } 

、私が取得するには、次エラー:

"現在のタイプConverge.Service.Interfaces.IUserServiceはインターフェイスであり、構築できません。タイプマッピングがありませんか?"私が何が欠けているかもわかりません。どんな助けも大変ありがとうございます。もっと情報が必要なら私に知らせてください。

ここUPDATE はUnityConfigクラスは少し検索した後、私は何が起こっているかを考え出し、他のプロジェクトを作成するので、

public class UnityConfig 
{ 
    private static readonly Lazy<IUnityContainer> Container = new Lazy<IUnityContainer>(() => 
    { 
     var container = new UnityContainer(); 

     RegisterTypes(container); 

     return container; 
    }); 

    public static IUnityContainer GetConfiguredContainer() 
    { 
     return Container.Value; 
    } 

    private static void RegisterTypes(IUnityContainer container) 
    { 
     new ServiceInjection() 
      .Inject(container); 
    } 
} 

public class ServiceInjection 
    { 
     public void Inject(IUnityContainer container) 
     { 
      container.RegisterType<IUserService, UserService>(); 
     } 
    } 
+0

コンポジションルート(コンテナをMVCに結び付けるスタートアップコード)のコードを表示してください。 – NightOwl888

+0

本当に、 'Inject'メソッドが呼ばれていますか?あなたのコンテナ登録コードが実行されていないように見える – Backs

+0

そう呼ばれている。それに足を踏み入れた。 –

答えて

0

OKです。ただばかな間違い。私のServiceInjectionクラスは別のdllにありました。パッケージマネージャを使用してUnity DIを追加すると、メインプロジェクトとインジェクションDLLにApp_Startフォルダが追加されました。私は、ServiceInjection dllからApp_Startフォルダと内容を削除するのを忘れていました。そのフォルダが削除されると、すべてが正常に動作しました。

0

私はこれが古いと知っていますが、他の誰かがこの問題を抱えている場合は、サービスとマネージャー(およびそれらのインターフェース)を追加したときも同じエラーが表示されますが、注入構成。このエラーが発生した場合は、新しいインターフェイスが実際に注入されていることを確認してください!

関連する問題