代理设计模式与IoC

时间:2016-12-01 22:26:05

标签: caching design-patterns proxy inversion-of-control

我正在尝试为缓存服务实现代理设计模式,如下所示。

public interface IProductService
{
   int ProcessOrder(int orderId);
}

public class ProductService : IProductService
{
   public int ProcessOrder(int orderId)
   {
      // implementation
   }
}

public class CachedProductService : IProductService
{
   private IProductService _realService;

   public CachedProductService(IProductService realService)
   {
      _realService = realService;
   }

   public int ProcessOrder(int orderId)
   {
      if (exists-in-cache)
         return from cache
      else
         return _realService.ProcessOrder(orderId);
   }
}

如何使用IoC容器(Unity / Autofac)创建实际服务和缓存服务对象,因为我可以将 IProductService 注册到 ProductService CachedProductService < / em>但 CachedProductService 在创建过程中需要 IProductService 对象( ProductService )。

我想要达到这样的目的:

应用程序将以 IProductService 为目标,并为实例请求IoC容器,并根据应用程序的配置(如果启用/禁用缓存),将为应用程序提供 ProductService < / em>或 CachedProductService 实例。

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:1)

如果没有容器,您的图表将如下所示:

new CachedProductService(
    new ProductService());

以下是使用Simple Injector的示例:

container.Register<IProductService, ProductService>();

// Add caching conditionally based on a config switch
if (ConfigurationManager.AppSettings["usecaching"] == "true")
    container.RegisterDecorator<IProductService, CachedProductService>();