编程语言
首页 > 编程语言> > c# – Castle Windsor命名空间冲突

c# – Castle Windsor命名空间冲突

作者:互联网

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

因此,当我在Org.Company命名空间内工作时,我无法执行以下操作:

Company.OtherClass obj;

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

Org.Company.Otherclass obj

哪个不存在.

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

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

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

<using assembly="MyProj, Version=1.0.0.0, Culture=neutral" />
...
<component
  service="Company.IOtherClass"
  type="Company.OtherClass"
  />

我收到以下错误:

{“无法将字符串’Company.OtherClass’转换为类型.确保包含该类型的程序集已加载到进程中,或者考虑指定该类型的程序集限定名.”}

可能是因为它在Org.Company内部查找,在MyProj程序集中定义.

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

解决方法:

据我所知,您的问题是从XML引用?对?

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

<component
    service="Company.IOtherClass"
    type="Company.OtherClass"
/>

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

<component
    service="Company.IOtherClass, OtherClassAssembly"
    type="Company.OtherClass, OtherClassAssembly"
/>

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

<component
    service="Company.IOtherClass, OtherClassAssembly, Version=..., Culture=..., PublicKeyToken=..."
    type="Company.OtherClass, OtherClassAssembly, Version=..., Culture=..., PublicKeyToken=..."
/>

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

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

global::Company.OtherClass

你也可以使用:

using Company;

或者只导入一个类:

using ClassFromOtherCompany = Company.OtherClass;

标签:c,namespaces,net,castle-windsor
来源: https://codeday.me/bug/20190620/1244032.html