0

名前付きインスタンスを使用して同じインターフェースの実装に登録しようとしています

kernel.Bind<IRepository>().To<CachedRepository>().InSingletonScope();
kernel.Bind<IRepository>().To<DbRepository>().InSingletonScope().Named("db");

アイデアは、名前を指定しないと CachedRepository が作成され、DB指向のものが必要な場合は Named 属性を使用するということですが、単純なオブジェクトが作成されると、この惨めなことが失敗します

public class TripManagerController : Controller
    {
        [Inject]
        public IRepository Repository { get; set; } // default Cached repo must be created

        public TripManagerController()
        {
            ViewBag.LogedEmail = "test@test.com";
        }
}

エラーは

IRepository のアクティブ化でエラーが発生しました 一致するバインディングが複数あります。アクティベーション パス: 2) 依存関係 IRepository を TripManagerController 型のコンストラクターのパラメーター リポジトリに挿入する 1) TripManagerController の要求

提案: 1) IRepository のバインディングを 1 回だけ定義したことを確認します。

BD 指向のリポジトリ用の新しいインターフェイスを作成せずに、私が望むものを達成する方法はありますか? どうも

4

2 に答える 2

0

wiki に示されている属性[Named]が機能するはずです。

ところで、ctor注射以外には近づかないでください!

于 2013-04-20T07:46:09.013 に答える