春天.. NET - Lambdas作为依赖项-可用于XML

本文关键字:用于 依赖 XML NET Lambdas 春天 | 更新日期: 2023-09-27 17:50:17

我知道春天。. NET支持"Spring表达式"——在运行时作为代码解析的文本——并且它们可以在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 )
{/*...*/}

春天.. NET - Lambdas作为依赖项-可用于XML

直接使用Spring.net表达式是不可能的。也许你可以通过使用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委托)。

也许你可以将它与表达式结合使用来得到你需要的结果。