允许通过工厂方法在Castle Windsor中进行可选(null)属性注入?

Ras*_*sKL 8 c# castle-windsor

我已经注册了一个组件

container.Register(Component.For<XType>()
 .LifeStyle.Is(LifestyleType.Transient)
 .UsingFactoryMethod(SomeMethod));
Run Code Online (Sandbox Code Playgroud)

我目前正在使用它在我的ASP.NET MVC控制器上进行属性注入.但是 - 我目前的问题是SomeMethod有时会返回null.Castle对此并不是很满意并抱怨null实例.

是否有一种简洁的方法来配置Windsor以允许此组件为空?我一直在探索文档,但还没有找到办法.

谢谢.

Krz*_*mic 6

不,没有办法通过温莎传递null.

如果组件为空,显然不能使用它,那么无论如何都是可能的,这将是毫无意义的.

如果您仅将此组件用作某个其他组件的属性,我认为最好将其作为DynamicParameter传递.如果它为空,温莎将忽略它.

  • 它是一个瞬态依赖,有时为null - 通常它有一个有意义的值 - 为每个请求调用工厂方法.我看不出这完全没有意义. (3认同)
  • 我同意允许空值是有用的.这将是反转静态对象的好方法,例如在WCF,`ServiceSecurityContext.Current`中.但是,如果用户未经过身份验证,那当然可以为null.空对象模式是最佳方式. (3认同)