1

IoC コンテナとして Simple Injector を使用しています。SimpleInjector は、この単純な手法を使用して、Per Thread と Per Web Request の混合ライフ スタイルを処理します。

container.RegisterPerWebRequest<IWebUnitOfWork, UnitOfWork>();
container.RegisterLifetimeScope<IThreadUnitOfWork, UnitOfWork>();
container.Register<IUnitOfWork>(() => container.GetInstance<UnitOfWork>());

// Register as hybrid PerWebRequest / PerLifetimeScope.
container.Register<UnitOfWork>(() =>
{
    if (HttpContext.Current != null)
        return container.GetInstance<IWebUnitOfWork>() as UnitOfWork;
    else
        return container.GetInstance<IThreadUnitOfWork>() as UnitOfWork;
});

、&IUnitOfWorkなどのクラスでインターフェイスを装飾したいと考えています。何を飾ればいいですか?UnitOfWorkAuthoriseDecoratorUnitOfWorkExceptionDecoratorUnitOfWorkTraceDecorator

  • IUnitOfWork
  • IWebUnitOfWork&IThreadUnitOfWork
  • IUnitOfWorkIWebUnitOfWork&& _IThreadUnitOfWork
  • UnitOfWork
  • 他の何か
4

1 に答える 1

1

IUnitOfWorkインスタンスを装飾するのが最も直感的だと思います。

container.RegisterDecorator(typeof(IUnitOfWork),
    typeof(UnitOfWorkAuthoriseDecorator));

container.RegisterDecorator(typeof(IUnitOfWork),
    typeof(UnitOfWorkExceptionDecorator));

container.RegisterDecorator(typeof(IUnitOfWork),
    typeof(UnitOfWorkTraceDecorator));

複数のインターフェイスをデコレートする場合、インターフェイスごとにデコレータ(この場合はインターフェイスごとに3つのデコレータ)が必要になるため、他のものをデコレートするのはおそらくかなり厄介です。

クラスのデコレーションUnitOfWorkは可能ですが、このクラスのすべてのメンバーを仮想化し、デコレータでそれらをオーバーライドする必要があるため、おそらく非常に不便です。これらのデコレータはから継承する必要があるためUnitOfWorkです。

于 2012-12-27T13:40:58.310 に答える