为什么这个Castle Windsor DI代码无法编译?

时间:2013-12-30 23:14:13

标签: c# dependency-injection asp.net-web-api castle-windsor asp.net-web-api-routing

此代码:

public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container.Register(AllTypes.FromThisAssembly()      
                  //AllTypes.FromAssemblyNamed("Acme.Crm.Data")
                  .Where(type => type.Name.EndsWith("Repository"))
                  .WithService.DefaultInterfaces()
                  .Configure(c => c.LifeStyle.PerWebRequest));
}

...从官方文档here派生/改编,失败,“只有赋值,调用,递增,递减,等待和新对象表达式才能用作语句

我犯了什么罪?或官方文档误导我?

更新

Simon Whitehead要求,这是全班:

using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;
using Castle.Windsor;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Castle.MicroKernel.Lifestyle;

namespace HandheldServer.DIInstallers
{
    public class RepositoriesInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(//Classes.FromThisAssembly() 
                               //AllTypes.FromAssemblyNamed("Acme.Crm.Data")
                               AllTypes.FromThisAssembly()
                                       .Where(type => type.Name.EndsWith("Repository"))
                                       .WithService.DefaultInterfaces()
                                        //.Configure(c => c.LifeStyle.PerWebRequest));
                                       .Configure(c => c.LifeStyle.PerWebRequest));
        }
    }
}

1 个答案:

答案 0 :(得分:3)

我认为这是文档。 Configure接受一个Action,它是一个应该返回void的函数,这个lambda试图返回一个值。

使用

.Configure(c => c.LifestylePerWebRequest())

或者看起来你不打算为不同的组件使用不同的生活方式,你可以在不使用配置的情况下应用生活方式:

.Where(type => type.Name.EndsWith("Repository"))
.WithService.DefaultInterfaces()
.LifestylePerWebRequest());