使用Spring.Net的委托和lambda表达式

Bea*_*ker 6 c# lambda delegates spring.net

是否可以动态创建委托

arg => { return something; }
or arg => someting;
Run Code Online (Sandbox Code Playgroud)

使用内置的DelegateFactoryObject和Spring.Net提供的Spring Expressions?

我想创建没有编码的工厂.spring文档中的抽象示例需要一个抽象工厂,并通过动态配置实现工厂方法.我想通过Spring.Net定义委托和结果.

我已经使用了如下构造.

<object type="Spring.Objects.Factory.Config.DelegateFactoryObject">
  <property name="DelegateType" value="System.Func&lt;string,bool&gt;" />
  <property name="TargetObject" value="aString" />
  <property name="MethodName" value="Equals" />
</object>

<object type="Spring.Objects.Factory.Config.DelegateFactoryObject">
  <property name="DelegateType" value="System.Func&lt;string,My.Interface&gt;" />
  <property name="TargetObject">
    <object id="result" type="My.DelegateContainer&lt;string,My.Interface&gt;">
      <constructor-arg name="objectToReturn" ref="theObjectToReturn" />
    </object>
  </property>
  <property name="MethodName" value="Evaluate" />
</object>
Run Code Online (Sandbox Code Playgroud)

(输入字符串并输出My.Interface实现类型,传递ObjectToReturn)

...但我无法找到如何使用表达式来定义通过xml-config返回对象的函数的解决方案.我想在一个简单的配置定义工厂中替换此示例中的DelegateContainer,返回ObjectToReturn.

这个问题与这个问题有关:如何在Spring.net中注入Predicate和Func,你可以在那里找到关于这个问题的更多信息.

小智 1

我相信您正在尝试使用委托异步调用方法,如果是这样,您可以使用以下任何方法来使用异步调用作为委托来调用函数:

       Action act = () =>
        { 
             //Function Body            
        };
        //call
        act();


        Action<Action> act2 = (x) =>
        { 
            //Function Body            
        };
        //call
        act2(() => { });

        var tsk = Task.Factory.StartNew(() => {
            //Function Body                     

        });
        //call
        tsk.Wait();

        Parallel.Invoke(() => {
            //Function Body                                 
        }, () => {
            //Function Body                                 
        });
Run Code Online (Sandbox Code Playgroud)

最后,您可以使用 Func<> 如下:

Func<string, int, string> sayHello = delegate(string name, int age)
        {
            return string.Format("my name is {0} and I'm {1} years old.", name, age.ToString());
        };
Run Code Online (Sandbox Code Playgroud)

希望这能有所帮助,最好。