2013-05-15 127 views
4

假设我正在名称空间内部工作,例如Org.Company,并且此名称空间包含MyClass。 我还在导入一个名为Company的名称空间的nuget,其类名为OtherClassCastle Windsor命名空间冲突

所以,当我在我的Org.Company命名空间里工作,我不能做到以下几点:

Company.OtherClass obj;

,因为编译器假定我实际上意味着:

Org.Company.Otherclass obj

哪些不存在。

所以,据我所知,而不是使用完全合格的名字,其实我必须导入其他命名空间,例如using Company;

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

编辑: 这是我对我的温莎城堡的xml文件

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

我收到以下错误:

{"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包这可能是固定......有没有办法做到这一点?

+0

Castle Windsor是否返回任何错误meesage?或者,您可以在那里使用完全限定的名称,包括装配体? – Pako

回答

5

据我了解你的问题是关于从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::Company.OtherClass 

你也可以使用使用:

using Company; 

或只输入一个类别:

using ClassFromOtherCompany = Company.OtherClass; 
+1

谢谢,那有效。我最后简单地添加了另一个“使用程序集”节点,如:<使用程序集=“公司”/>'。我不知道我可以使用它来导入已编译的dll。 – dcastro

0

您可以使用命名空间别名,像这样MSDN例如:

using Co = Company.Proj.Nested; 
+0

但是因为他提到他需要在XML中完成,别名似乎不是有效的选项 – Pako

+0

但是,这将不会从XML文件中看到... – dcastro

0

好了,从问题的描述,你得到它会出现在您的怀疑是正确的错误消息判断。

在Windsor运行安装程序时,Nuget包中的程序集尚未加载到AppDomain中,所以无法知道从何处获取Company.OtherClass

然后,您可以按照错误消息的建议进行操作,并使用装配限定的类型名称,或者使用<using />标记预装装配。

+0

+1,这使我向正确的方向发送 – dcastro