1

我使用 Simple Injector 作为我的 IoC 容器。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
  • IUnitOfWork&& IWebUnitOfWork_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 回答