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