8

我有来自旧城堡的这段代码:

IoC.Container.Register( 
    AllTypes
        .FromAssemblyNamed(a)
        .Pick().WithService.FirstInterface()
        .Configure(o => o.LifeStyle.PerWebRequest));

当我升级到城堡 3.2 时,我收到此错误:

Castle.MicroKernel.Registration.AllTypes' 已过时

o.LifeStyle.PerWebRequest的这个错误:

只有 assignment、call、increment、decrement、await 和 new 对象表达式可以用作语句

我怎样才能解决这个问题?

4

2 回答 2

12

就像@charleh 说的那样,AllTypes被替换为Classes所以解决这个问题是一个简单的查找和替换。

实际上,如果您查看编译器警告,它应该说:

'AllTypes' 已被弃用,并将在未来的版本中删除。改用“类”静态类(如果您只想注册具体类)或“类型”静态类(如果您也想注册接口或抽象类)。它公开了完全相同的方法。

这种变化的原因是这AllTypes是一个谎言——它只匹配具体的(非抽象的)类,所以Classes一个更好的名字可以更好地告诉你它的真正作用。

至于另一个问题,将属性调用更改为方法调用将解决它:

Container.Register(
    Classes.FromAssemblyNamed(a)
        .Pick().WithServiceFirstInterface()
        .Configure( o => o.LifestylePerWebRequest()));

或者更简单,跳过Configure

Container.Register(
    Classes.FromAssemblyNamed(a)
        .Pick().WithServiceFirstInterface()
        .LifestylePerWebRequest());

Windsor 附带BreakingChanges.txt文件,其中描述了重大更改以及如何升级。

于 2013-04-27T08:16:52.580 回答
0

第一个问题AllTypes相当于Classes(我今天早上实际上学到了这个!)

所以而不是

IoC.Container.Register(AllTypes.etc)

利用

IoC.Container.Register(Classes.etc)

不确定其他但快速的搜索似乎表明生活方式可以在 3.2 中插入,您可能缺少参考

编辑:

啊:看起来您已经引用了 Castle.Windsor dll 的客户端构建 - 还有另一个构建针对包含您需要的类型的完整 .NET 配置文件 - 检查您的引用

温莎城堡 3.2 中缺少 PerWebRequest 生活方式

于 2013-04-26T10:58:10.240 回答