我知道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 )
{/*...*/}
答案 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委托)。
也许您可以将它与表达式结合使用以获得所需的结果。