是否可以像
一样动态创建委托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<string,bool>" />
<property name="TargetObject" value="aString" />
<property name="MethodName" value="Equals" />
</object>
<object type="Spring.Objects.Factory.Config.DelegateFactoryObject">
<property name="DelegateType" value="System.Func<string,My.Interface>" />
<property name="TargetObject">
<object id="result" type="My.DelegateContainer<string,My.Interface>">
<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你可以在那里找到关于这个问题的更多信息。
答案 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());
};
希望这个帮助, 最好的。