温莎类型工厂设施,在使用单例生活方式时传递参数



我用的是温莎城堡

我有两种组件类型,可以在GUI运行时选择它们的实现。为了处理这个问题,我按名称解析它们。为了按名称解析它们,我使用了类型化工厂设施。

一个组件类型依赖于另一个。为了处理依赖关系,我将参数作为工厂方法/构造函数参数传递。

下面是这个工厂接口的编辑和删节版本:

public interface IModelFactory
{
    IMyDomainCommandFactory GetFooCommandFactory();
    IMyDomainCommandFactory GetBarCommandFactory();
    IMyDomainStrategy GetCreateSpecificSizeStrategy(int size, IMyDomainCommandFactory commandFactory);
    IMyDomainStrategy GetCreateUntilFailureStrategy(IMyDomainCommandFactory commandFactory);
}

请注意,我使用自己的IMyDomainCommandFactory实现,而不是使用类型化工厂功能。那些工厂故意制造复杂的行为,设施不适合他们的需要。

我注意到的问题是,如果我用单例方式注册我的策略组件,我总是得到相同的实例,即使我向getter传递不同的参数。

在我看来,这违背了最少惊讶原则,但也许其他人有不同的意见:)这应该被认为是一个bug吗?

如果没有,是否有一种干净的方法让容器或工厂每个参数组合只创建一个实例?

取决于你如何看待它,但是每个实例的参数组合肯定不能被称为单例,所以我说如果Windsor确实实现了你所期望的行为,它将违背PoLA。

如果你想要它,你需要一个自定义的,非单态的生活方式。

最新更新