1

この問題の背景: 実際には、IUnitOfWork の実装に依存する多くのサービスが見られます。これらのアプリケーションの ninject バインディングを調べると、通常は IUnitOfWork のバインディングが 1 つしかないため、非常に単純であることがわかります。

残念ながら、私のアプリケーションには IUnitOfWork のバインディングが 2 つ必要です。サービス A と B はステージング データベースを指す作業単位を使用し、サービス C と D は本番データベースを指す作業単位を使用します。

サービス A と B の名前付きバインディングを設定し、次のように IUnitOfWork のバインディングを作成することで、今すぐこれを行うことができます。

Kernel.Bind<IUnitOfWork>()
            .To<StagingUnitOfWork>
            .WhenParentNamed("ServiceA")

kernel.Bind<IServiceA>()
            .To<ServiceA>
            .Named("ServiceA")

ただし、「ServiceB」の IUnitOfWork 用に別のバインディングを作成する方法が気に入りません。「それを吸う」だけで、このアプローチを使用する必要がありますか?

注:クラスにインジェクション属性などをきれいに保ちたい.

4

1 に答える 1

1

これがあなたが持っている唯一のアプローチだと思います。

kernel.Bind<IUnitOfWork>().To<StagingUnitOfWork>().WhenInjectedInto<ServiceA>();
kernel.Bind<IUnitOfWork>().To<StagingUnitOfWork>().WhenInjectedInto<ServiceB>();
kernel.Bind<IUnitOfWork>().To<ProductionUnitOfWork>().WhenInjectedInto<ServiceC>();
kernel.Bind<IUnitOfWork>().To<ProductionUnitOfWork>().WhenInjectedInto<ServiceD>();
于 2012-10-17T13:16:06.993 に答える