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

时间:2012-08-29 14:06:08

标签: c# delegates lambda spring.net

是否可以像

一样动态创建委托
arg => { return something; }
or arg => someting;

使用内置的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>

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

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

这个问题与这个问题有关:How to inject Predicate and Func in Spring.net你可以在那里找到关于这个问题的更多信息。

1 个答案:

答案 0 :(得分:1)

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

       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                                 
        });

最后, 你可以使用Func&lt;&gt;如下:

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());
        };

希望这个帮助, 最好的。