我正在使用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相反,但也许其他人有不同意见:)这应该被视为错误吗?
如果没有,是否有一种干净的方法让容器或工厂只为每个参数组合创建一个实例?
答案 0 :(得分:1)
根据你的看法,但当然每个参数组合的实例不能被称为单身,所以我说如果温莎确实实现了你期望的行为,那么它将违背PoLA。
如果你想要它,你需要一种自定义的非单身生活方式。