Spring.NET - лямбды как зависимости - возможно с XML? - PullRequest
2 голосов
/ 16 апреля 2011

Я знаю, что Spring.NET поддерживает 'Spring Expressions' - текст, который анализируется во время выполнения как код, - и что он может быть объявлен в вашей конфигурации XML.

Но вы можете определить лямбда-выражение,и проанализировал ли он и использовал ли он в качестве строго типизированного делегата в вашем коде, скажем, в качестве параметра конструктора?

Примерно так:

<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 Ответ

1 голос
/ 29 августа 2012

AFAIK невозможно напрямую использовать выражения Spring.net.Возможно, вы сможете решить проблему передачи делегата в конструктор / свойство с помощью xml-config, используя встроенный DelegateFactoryObject из Spring.net.

  <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).

Возможно, вы можете использовать его в сочетании с выражениями для получения результататебе нужно.

...