我有一个需要某些状态才能运行的MixIn。
我正在注册它。。
container.Register(Component.For(Of ICat) _ .ImplementedBy(Of Cat) _ .LifeStyle.Transient _ .Proxy.MixIns(New MyMixin()))
当我调用containerat.Resolve(of ICat)时,我获得了ICat的代理,该代理也实现了IMixin。
但是,如果我再次调用containerat.Resolve(ICat),则会获得ICat的新代理,但MyMixin是SAME实例。 (这很有意义,因为我没有告诉容器创建IMixin的任何方法)
因此,即使该组件的生活方式为瞬态,IMixin还是一个Singleton。
我如何通过Fluent接口告诉Windsor为该组件创建MyMixIn的新实例?
我有一个需要某些状态才能运行的MixIn。我正这样注册它。.container.Register(Component.For(ICat)_ .ImplementedBy(Cat)_ ...
我想我已经解决了。
我不确定它如何影响Windsor,但在DynamicProxy级别,每种代理类型都有mixin实例。因此,如果要创建自己的mixin实例,则可能每次都在生成新的代理类型。为了避免这种情况,请在您的混合类型中覆盖Equals和GetHashCode。
如果您以过分的生活方式注册mixin,它将为每个组件创建一个新实例: