我知道 Spring.NET 支持“Spring 表达式”——在运行时作为代码解析的文本——并且它们可以在您的 XML 配置中声明。
但您能否定义一个 lambda 表达式,并将其解析并用作代码中的强类型委托(delegate),例如,作为构造函数参数?
像这样:
<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 )
{/*...*/}
最佳答案
据我所知,直接使用 Spring.net 表达式是不可能的。也许您可以使用 Spring.net 的内置 DelegateFactoryObject 解决通过 xml-config 将委托(delegate)传递给构造函数/属性的问题。
<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 类型的委托(delegate)。您还可以创建任何其他类型的委托(delegate)(只需在名为“DelegateType”的属性中指定类型(包括您要求的 Func 委托(delegate))。
也许您可以将它与表达式结合使用以获得您需要的结果。
关于c# - Spring.NET - 作为依赖项的 Lambdas - 可能使用 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688405/