我正在尝试为缓存服务实现代理设计模式,如下所示。
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 实例。
有什么想法吗?感谢。
答案 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>();