1

私はかなり単純なソリューションのセットアップを持っています:

Web プロジェクト --> サービス層 --> リポジトリ

私の IoCbootstrapper クラスは、私の Web プロジェクトにあります。

var c = new Container();
c.Register<IUserService, UserService>();        
c.Register<ILoggingService, LoggingService>();

それは問題ありませんが、私のサービスはリポジトリに依存しています。

Webプロジェクトがリポジトリを認識していないため、この方法ではサービスのインスタンスを作成できないため、サービスレイヤークラスライブラリに「部分的なブートラッパー」を設定してWebプロジェクトに渡す方法はありますか?

4

2 に答える 2

1

サービス層に、コンテナーを取得して必要なものを登録するアクションを公開させます。

リポジトリを参照するサービス層

namespace Project.ServiceLayer {
    public static class DryIocExtesnions {
        public static void AddServiceLayer(this IContainer c) {
            c.Register<IUserRepository, UserRepository>();        
            c.Register<IOtherRepository, OtherRepository>();
        }
    }
}

Web プロジェクトにある IoCbootstrapper。

var c = new Container();
c.Register<IUserService, UserService>();        
c.Register<ILoggingService, LoggingService>();

//Register service layer 
c.AddServiceLayer();

好みに応じて、サービスレイヤーが構成ルートからの懸念を認識しなければならないという欠点があります。を独自のコンテナに抽象化できますが、それはやり過ぎかもしれません。

于 2016-11-27T17:31:37.967 に答える
0

container.WithAutoFallbackResolutionリポジトリアセンブリ、またはいくつかのバリアントで使用できる場合がありますcontainer.RegisterMany

于 2016-11-30T21:03:41.250 に答える