Castle Windsor命名空间冲突

dca*_*tro 4 .net c# castle-windsor namespaces

假设我在一个名为的命名空间内工作,Org.Company并且该命名空间包含MyClass.我还导入了一个带有命名空间的nuget,该命名空间Company使用一个名为的类调用OtherClass.

所以,当我在我的Org.Company命名空间内工作时,我不能执行以下操作:

Company.OtherClass obj;

因为编译器假定我的意思是:

Org.Company.Otherclass obj

哪个不存在.

所以,据我所知,我实际上必须导入其他名称空间,而不是使用完全限定名称 using Company;

但问题是,我需要OtherClass 从XML文件(Castle Windsor配置文件)中引用它,并且完全限定名称Company.OtherClass不起作用.有没有解决的办法?更改命名空间名称不是一个可行的选择.

编辑: 这是我在Castle Windsor xml文件中的内容

<using assembly="MyProj, Version=1.0.0.0, Culture=neutral" />
...
<component
  service="Company.IOtherClass"
  type="Company.OtherClass"
  />
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

{"Could not convert string 'Company.OtherClass' to a type. Make sure assembly containing the type has been loaded into the process, or consider specifying assembly qualified name of the type."}

可能是因为它在内部Org.Company而不是在MyProj组件中定义.

我假设如果有一种方法可以添加另一个<using />引用Nuget包的语句,这可以修复...有没有办法做到这一点?

Mil*_*ski 5

据我所知,你的问题是关于从XML引用?对?

因此,Castle.Windsor建议"考虑指定类型的汇编限定名称.".这是什么意思?这意味着代替:

<component
    service="Company.IOtherClass"
    type="Company.OtherClass"
/>
Run Code Online (Sandbox Code Playgroud)

您应该使用它们来自的程序集给出类名:

<component
    service="Company.IOtherClass, OtherClassAssembly"
    type="Company.OtherClass, OtherClassAssembly"
/>
Run Code Online (Sandbox Code Playgroud)

甚至是完全合格的装配名称:

<component
    service="Company.IOtherClass, OtherClassAssembly, Version=..., Culture=..., PublicKeyToken=..."
    type="Company.OtherClass, OtherClassAssembly, Version=..., Culture=..., PublicKeyToken=..."
/>
Run Code Online (Sandbox Code Playgroud)

注意:将OtherClassAssembly替换为实际程序集名称,并且不要在此处添加.dll扩展名 注意:有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx,例如处理嵌套类

要在代码中使用OtherClass,您可以使用global

global::Company.OtherClass
Run Code Online (Sandbox Code Playgroud)

你也可以使用:

using Company;
Run Code Online (Sandbox Code Playgroud)

或者只导入一个类:

using ClassFromOtherCompany = Company.OtherClass;
Run Code Online (Sandbox Code Playgroud)