我有来自旧城堡的代码
IoC.Container.Register(
AllTypes
.FromAssemblyNamed(a)
.Pick().WithService.FirstInterface()
.Configure(o => o.LifeStyle.PerWebRequest));
当我升级到城堡3.2时,我收到此错误:
Castle.MicroKernel.Registration.AllTypes'已过时
o.LifeStyle.PerWebRequest 的错误:
只有赋值,调用,递增,递减,等待和新对象表达式才能用作语句
我该如何解决这个问题?
答案 0 :(得分:8)
就像@charleh所说,AllTypes
已被Classes
取代,因此修复此问题只是一个简单的查找和替换。
实际上,如果你看一下编译器警告它应该说:
'AllTypes'已弃用,将在以后的版本中删除。 使用'Classes'静态类(如果你想只注册具体的 class)或'Types'静态类(如果你想注册接口) 或者抽象类)。它暴露了完全相同的方法。
这种变化的原因是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
文件,其中描述了重大变化以及如何升级。
答案 1 :(得分:1)
第一个问题是AllTypes
相当于Classes
(我今天早上实际学到了这一点!)
所以而不是
IoC.Container.Register(AllTypes.etc)
使用
IoC.Container.Register(Classes.etc)
不确定另一个,但快速的搜索似乎表明生活方式是可插入的3.2,你可能会错过参考
编辑:
啊:看起来你已经引用了Castle.Windsor dll的客户端构建 - 还有另一个构建针对完整的.NET配置文件,它包含了你需要的类型 - 检查你的引用