所以我试图在使用autofac的同时实现拦截的概念。我没有做任何花哨的事情,比如实现动态拦截,每个类我都有具体的代码。
我的代码(不是我的真实代码,我在网上找到了这个,但它说明了我的问题
public class DefaultProductService : IProductService
{
public Product GetProduct(int productId)
{
return new Product();
}
}
public class CachedProductService : IProductService
{
private readonly IProductService _innerProductService;
private readonly ICacheStorage _cacheStorage;
public CachedProductService(IProductService innerProductService, ICacheStorage cacheStorage)
{
if (innerProductService == null) throw new ArgumentNullException("ProductService");
if (cacheStorage == null) throw new ArgumentNullException("CacheStorage");
_cacheStorage = cacheStorage;
_innerProductService = innerProductService;
}
public Product GetProduct(int productId)
{
string key = "Product|" + productId;
Product p = _cacheStorage.Retrieve<Product>(key);
if (p == null)
{
p = _innerProductService.GetProduct(productId);
_cacheStorage.Store(key, p);
}
return p;
}
}
public class ProductManager : IProductManager
{
private readonly IProductService _productService;
public ProductManager(IProductService productService)
{
_productService = productService;
}
}
我的问题是,我希望我的 ProductManager 接收 IProductService 的“CachedProductService”,我希望我的 CachedProductService 接收 IProductService 的“DefaultProductService”。
我知道一些解决方案,但它们似乎都不完全正确。这样做的正确方法是什么?
谢谢!迈克尔