Castle Windsor XML配置找不到类型

时间:2016-04-20 12:48:34

标签: c# castle-windsor

我通常使用(流畅的)代码注册组件,但我现在需要通过XML注册某些类型。该文件如下所示: -

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <components>
    <component service="MyNamespace.IFoo, MyAssembly"
               type="MyNamespace2.ConcreteFoo, MyAssembly2"
               lifestyle="transient" />
  </components>
</configuration>

我使用以下代码注册类型: -

container.Install(
    Castle.Windsor.Installer.Configuration.FromXmlFile(filename));

然而,这会因Castle.MicroKernel.SubSystems.Conversion.ConverterException: -

而失败
  

无法将字符串'MyNamespace2.ConcreteFoo,MyAssembly2'转换为类型。程序集MyAssembly2,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null匹配,但它不包含类型。确保类型名称没有输入错误。

为了确保我没有发疯,我在上一行之前添加了这段代码: -

var test = AppDomain.CurrentDomain.GetAssemblies();

断点确认有问题的程序集位于当前的AppDomain中,所讨论的具体类型位于此程序集的“DefinedTypes”中。它也是公开的。

这应该是一件很简单的事情,但我现在正在摸不着头脑!

修改

我应该指出包含具体类型的程序集在运行时加载(使用MEF),并且存在于应用程序的exe的不同文件夹中(所以我不能在我的XML文件中使用<using>) 。但是我假设它存在于AppDomain中,那么我正在做的事情应该可行。或者Windsor做了一些奇怪的事情,比如尝试再次从文件加载程序集,而不仅仅是查看AppDomain?

修改2

作为一项实验,我刚试过这行代码: -

container.Register(Classes.FromAssemblyNamed("MyAssembly2").BasedOn<IFoo>());

这会抛出一个FileNotFoundException,备份我之前的预感,即Windsor正在尝试从文件加载程序集而不是检入AppDomain。这是为什么?

0 个答案:

没有答案