()=>构造

时间:2010-07-16 14:18:36

标签: visual-studio-2008 visual-studio-2005 c#-3.0 oauth c#-2.0

我正在将项目从visual studio 2005转换为visual studio 2008,并提出了上述结构。

using Castle.Core.Resource;
using Castle.Windsor;
using Castle.Windsor.Configuration.Interpreters;
using CommonServiceLocator.WindsorAdapter;
using Microsoft.Practices.ServiceLocation;

namespace MyClass.Business
{
    public class Global : System.Web.HttpApplication
    {
        public override void Init()
        {
            IServiceLocator injector =
                new WindsorServiceLocator(
                    new WindsorContainer(
                        new XmlInterpreter(
                            new ConfigResource("oauth.net.components"))));

            //ServiceLocator.SetLocatorProvider(() => injector);

            // ServiceLocator.SetLocatorProvider(injector);
        }
    }
}

ServiceLocator.SetLocatorProvider(()=> injector);

我可以了解这是什么。

5 个答案:

答案 0 :(得分:10)

这是lambda expression

我猜SetLocatorProvider方法的签名如下:

SetLocatorProvider( Func<IServiceLocator> callback ):

现在你必须提供这样的回调。基本上有三种选择:

使用方法(始终有效):

private IServiceLocator GetServiceLocator() { /* return IServiceLocator */ }

ServiceLocator.SetLocatorProvider( GetServiceLocator() );

使用委托(需要C#2.0):

ServiceLocator.SetLocatorProvider( delegate
        {
            // return IServiceLocator
        } );

使用 lambda (需要C#3.0):
那是你看到的代码......
由于没有参数(Func<IServiceLocator>只有返回值),您可以使用()指定此参数:

ServiceLocator.SetLocatorProvider( () => { /* return IServiceLocator */ } );

这可以翻译为

ServiceLocator.SetLocatorProvider( () => /* IServiceLocator */ );

也许您也想阅读this question + answer

答案 1 :(得分:2)

使用lambda表示法创建没有参数的内联委托。

答案 2 :(得分:2)

这是一个lambda。如果您熟悉委托,就像声明一个返回injector并将其用作委托的方法,除非您已经内联了该方法。

第一个()包含lambda的参数。例如,在事件处理中,您经常会看到(src, e)其中src是事件的发起人,e是事件本身。然后,这些参数可供后续代码使用。

如果它是多行的,您可以将(args) => { brackets }放在委托周围并返回值。这是速记。

答案 3 :(得分:0)

这是一个创建匿名委托的lambda表达式。也就是说,它是一个内联声明的函数。参数列表在paranthesis中,因此在这种情况下没有参数。当函数包含单个语句时,它会隐式返回该语句的值(或者根本不返回任何内容)。

在这种特定情况下,它是一个返回注射器的函数。这是ServiceLocator的常见模式,使用返回IoC容器的函数对其进行初始化。

答案 4 :(得分:0)

它不是构造函数,而是Lambda表达式。有关详细信息,请参阅here

在这种情况下()表示没有参数=&gt;是Lamda操作员和注射器正在返回。