Spring.NET - 作为依赖关系的Lambdas - 可能与XML一起使用吗?

时间:2011-04-16 17:51:37

标签: c# .net lambda spring.net

我知道Spring.NET支持'Spring Expressions' - 在运行时作为代码解析的文本 - 并且可以在XML配置中声明它们。

但是,您可以定义一个lambda表达式,并将其解析并用作代码中的强类型委托,例如,作为构造函数参数吗?

这样的事情:

<object name="Page1To2Transition"
    type="XmlVsDslConfig.PageTransition, XmlVsDslConfig">
  <constructor-arg type="string" value="Page1-Page2"/>
  <constructor-arg ref="Page1"/>
  <constructor-arg ref="Page2"/>
  <property name="CanTransition" expression="#CanTransition = {|p| true }"/>
</object>

PageTransition构造函数如下所示:

public PageTransition ( 
    String name, 
    Page from, 
    Page to, 
    Func<Page, bool> canTransition )
{/*...*/}

1 个答案:

答案 0 :(得分:1)

AFAIK直接使用Spring.net Expressions是不可能的。也许你可以通过使用Spring.net的内置DelegateFactoryObject来解决你通过xml-config将委托传递给构造函数/属性的问题。

  <object type="Spring.Objects.Factory.Config.DelegateFactoryObject, Spring.Core"> 
    <property name="DelegateType" value="System.Action"/> 
    <property name="TargetObject" ref="MyTarget" /> 
    <property name="MethodName" value="MyDelegate" /> 
  </object>

这将创建一个Action类型的委托。您还可以创建任何其他类型的委托(只需在名为“DelegateType”的属性中指定类型(包括您要求的Func委托)。

也许您可以将它与表达式结合使用以获得所需的结果。