首先,很抱歉,如果我使用的术语无效,试图正确但不确定是否正确,现在对我来说有点困惑。
我正在使用 Windsor 并且无法确定何时以及如何(我认为)使用基于接口的工厂实例化而不总是正常的ctor(IObj obj)
.
让我举个例子。我有这个构造函数
private ICache _cache;
private ICache _cache2;
public HomeController(ICacheFactory cacheFactory, ICache cache)
{
this._cache = cacheFactory.Create<ICacheFactory>();
this._cache2 = cache;
}
我设置代码的方式,_cache
并_cache2
返回 exakt 相同的对象。为什么我应该使用ICacheFactory
实例化类的方式?
这就是我配置它的方式
public interface ICacheFactory
{
ICache Create<T>();
}
public interface ICache
{
bool Get<T>(string key, out T exists);
}
public bool Get<T>(string key, out T result)
{
// my code
}
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromThisAssembly().BasedOn<IController>().LifestyleTransient());
container.AddFacility<TypedFactoryFacility>();
container.Register(Component.For<ICacheFactory>().AsFactory());
container.Register(Component.For<ICache>().ImplementedBy<CacheFactory>().LifestyleTransient());
}
我在想 CacheFactory 就像我做的那样
public class CacheFactory : ICache
{
private static ICache cacheObject;
public static ICache Current
{
get
{
if (cacheObject == null)
cacheObject = new CacheFactory();
return cacheObject;
}
}
public bool Get<T>(string key, out T result)
{
// my code
}
}
那么,我是否完整地思考了interface-based factories
该做什么,如果不是,我为什么要使用ICacheFactory
实例化课程的方式?
(我应该清楚,我已经阅读了 Windsor 文档,但没有 100% 得到它。)
感谢您的时间,我希望它不会模糊。