我有以下城堡温莎流利的配置代码...
container
.AddFacility<TypedFactoryFacility>()
.Register(
Component
.For<IXxxCache>()
.ImplementedBy<AppFabricXxxCache>()
.Named("AppFabricXxxCache")
.LifeStyle.FromContext(),
Component
.For<IXxxCache>()
.ImplementedBy<DatabaseXxxCache>()
.Named("DatabaseXxxCache")
.LifeStyle.FromContext(),
Component
.For<IXxxCacheFactory>()
.ImplementedBy<XxxCacheFactory>()
.DependsOn(new {cacheName})
);
XxxCacheFactory 如下...
public class XxxCacheFactory : IXxxCacheFactory
{
private readonly IWindsorContainer _container;
private readonly string _cacheName;
public XxxCacheFactory(IWindsorContainer container, string cacheName)
{
_container = container;
_cacheName = cacheName;
}
public IXxxCache Create()
{
try
{
var cache = new DataCacheFactory().GetCache(_cacheName);
return _container.Resolve<IXxxCache>("AppFabricXxxCache", new {cache});
}
catch (DataCacheException)
{
return _container.Resolve<IXxxCache>("DatabaseXxxCache");
}
}
public void Release(IXxxCache component)
{
_container.Release(component);
}
}
我可以使用以下代码来实现它...
[Test]
public void database_xxx_cache_returned_when_cache_does_not_exist()
{
ConfigurationManager.AppSettings["CacheName"] = "this_cache_does_not_exist";
var container = Castle.WindsorContainerBootStrap.BootStrapContainerAndRunInstallers<SingletonLifestyleManager>();
var factory = container.Resolve<IXxxCacheFactory>();
var cache = factory.Create();
}
理想情况下,我想删除工厂创建部分,让容器使用我拥有的工厂类获得正确的实现,就像这样......
[Test]
public void database_xxx_cache_returned_when_cache_does_not_exist()
{
ConfigurationManager.AppSettings["CacheName"] = "this_cache_does_not_exist";
var container = Castle.WindsorContainerBootStrap.BootStrapContainerAndRunInstallers<SingletonLifestyleManager>();
var cache = container.Resolve<IXxxCache>();
}
这可能吗?如果是这样,我错过了什么?