2016-12-01 2 views
0

Я пытаюсь реализовать шаблон прокси-прокси для служб кэширования, как показано ниже.Схема прокси-дизайна с IoC

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 но CachedProductService в свою очередь, требует IProductService объект (ProductService) во время создания.

Я пытаюсь прийти к чему-то вроде этого:

Приложение нацелит IProductService и запросить IoC контейнер для экземпляра и в зависимости от конфигурации приложения (если кэш включен/выключен), то приложение будет предоставлено с ProductService или CachedProductService экземпляр.

Любые идеи? Благодарю.

ответ

0

Без контейнера ваш график будет выглядеть следующим образом:

new CachedProductService(
    new ProductService()); 

Вот пример использования простой Инжектор:

container.Register<IProductService, ProductService>(); 

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