2013-05-15 122 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