1

我正在尝试将我们的一个应用程序从 Castle Windsor 2.1 升级到 2.5。

我删除了所有 Castle DLL,并添加了从 Castle 网站下载的 2.5 版本:

Castle.Core.dll Castle.Windsor.dll

在进行迁移之前,我还参考了我的项目:

Castle.Components.DictionaryAdapter.dll

但是,根据 Krzysztof Koźmic 在此处的帖子,不再需要此类引用,因为 DictionaryAdapter 现在捆绑到 Castle.Core.dll 中。

删除它后,我到处都收到错误消息:

错误 6 找不到类型或命名空间名称“DictionaryComponent”(您是否缺少 using 指令或程序集引用?)

错误 64 找不到类型或命名空间名称“DictionaryKey”(是否缺少 using 指令或程序集引用?)

错误 27 找不到类型或命名空间名称“DictionaryKeyAttribute”(是否缺少 using 指令或程序集引用?)

然后我想我应该添加对 Castle.Components.DictionaryAdapter.dll 的引用,因为可能是 CORE 没有在其中实现上面列出的类型。

这样做消除了所有错误,但给了我一个新错误:

错误 8 'd:.NET\app\libs\Castle.Core.dll' 和 'd:.Net\app\libs\Castle.Components.DictionaryAdapter.dll 中都存在“Castle.Components.DictionaryAdapter.DictionaryAdapterFactory”类型'

错误发生在以下方法实现上:

internal static ISettingService GetServiceFromAdapterFactory(NameValueCollection collection)
{
    var adapter = new DictionaryAdapterFactory();
    return adapter.GetAdapter<ISettingService>(collection);
}

有没有人在从 2.1 升级到 2.5 时遇到过这样的问题,可以给我一些建议吗?

提前致谢。

4

1 回答 1

2

要在这里回答我自己的问题,这是我必须在代码中更改的内容。

  • 将所有DictionaryKey更改为KeyAttribute
  • 将所有DictionaryComponent更改为ComponentAttribute
  • 使用Kernel.Register而不是Kernel.AddComponent

显然删除了所有 2.1 DLL 并添加了 2.5。您会注意到 DictionaryAdapter.dll 已被删除,因为它现在捆绑在 Castle.Core.dll 中

希望对将来的人有所帮助。

于 2012-07-16T08:15:11.760 回答