2011-07-18 51 views
2

为了解决this问题,我正在看看我们的spring.net配置是如何工作的。Spring.net - PropertyRetrievingFactoryObject - 属性为null

问题的根源来源于此片段:

<object name="someObject" singleton="false" type="SomeType.someObject, SomeAssembly"> 
    <constructor-arg name="authSession"> 
    <object type="Spring.Objects.Factory.Config.PropertyRetrievingFactoryObject, Spring.Core"> 
     <property name="TargetObject" ref="AuthSessionManager" /> 
     <property name="TargetProperty" value="CurrentAuthSession" /> 
    </object> 
    </constructor-arg> 
</object> 

在用户没有登录的情况下,将AuthSessionManager.CurrentAuthSession为空。在这种情况下,Spring.NET会抛出一个异常:“工厂对象返回空对象”。

如何告诉Spring在这种情况下空对象是可以接受的?

回答

3

您可以在构造函数的参数使用expression to retrieve an object from the spring context,是这样的:

<object name="someObject" singleton="false" 
     type="SomeType.someObject, SomeAssembly"> 
    <constructor-arg name="authSession" 
        expression="@(AuthSessionManager).CurrentAuthSession" /> 
</object> 

表达式允许评估为null,所以你不必告诉Spring什么。 这对我来说很简单(没有嵌套上下文)。

+0

我最终以一种不同的方式解决了这个问题,但是回过头来测试一下,它也起作用了。谢谢! :d – Jonas