【发布时间】:2011-04-27 01:09:38
【问题描述】:
我正在使用Castle Windsor。
我有两种组件类型,可以在运行时在 GUI 上选择实现。为了解决这个问题,我正在按名称解析它们。为了通过名称处理它们,我使用Typed Factory Facility。
其中一种组件类型依赖于另一种。为了处理依赖关系,我将参数作为工厂方法/构造函数参数传递。
这里是这个工厂界面的编辑和删节版本:
public interface IModelFactory
{
IMyDomainCommandFactory GetFooCommandFactory();
IMyDomainCommandFactory GetBarCommandFactory();
IMyDomainStrategy GetCreateSpecificSizeStrategy(int size, IMyDomainCommandFactory commandFactory);
IMyDomainStrategy GetCreateUntilFailureStrategy(IMyDomainCommandFactory commandFactory);
}
请注意,我使用我自己的 IMyDomainCommandFactory 实现,而不是使用 Typed Factory 工具。这些工厂的行为是故意复杂的,而且设施不适合他们的需求。
我注意到的问题是,如果我使用单例生活方式注册我的策略组件,我总是会返回相同的实例,即使我将不同的参数传递给 getter。
在我看来,这违背了Principal of Least Astonishment,但也许其他人有不同的看法:) 这应该被视为一个错误吗?
如果没有,是否有一种干净的方法可以让容器或工厂为每个参数组合只创建一个实例?
【问题讨论】:
标签: singleton castle-windsor typed-factory-facility