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包的语句,这可以修复...有没有办法做到这一点?
据我所知,你的问题是关于从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)