簡體   English   中英

C#,從引用的項目訪問類

[英]C#, accessing classes from a referenced project

在C#中,我正在開發一些具有某些標准功能的Windows服務,因此我已將所有這些通用功能放入了一個單獨的引用的實用程序項目中。

我遇到一種情況,我需要使用Activator.CreateInstance從實用程序項目中創建駐留在Windows Service項目中的業務類實例。

我的實用程序項目知道Type.GetType調用的名稱空間和類名稱,但是類型始終為null,當我考慮它時,它將無法從所引用的項目中獲取類型,或者可以它?

簡而言之:

項目A引用實用程序項目。
Utility Project希望從Project A創建類,它知道名稱空間和類名稱。

我是否應該遵循一種設計模式或方法來實現此功能? 還是看起來像不,不,我應該重構?

謝謝看

正如Jon所指出的,您可以使用反射來解決循環參考問題,但我建議重新考慮設計並對其進行重構。 兩個建議。

  • 使用接口對A和B進行十進制處理(首選解決方案)
  • 將A和B所需的零件移到C中,並從A和B中僅引用C。

如果要讓Type.GetType查找不在mscorlib或調用程序集中的類型,則需要指定標准程序集名稱(包括版本名(如果使用全名的話))。

例如:

// Prints nothing
Console.WriteLine(Type.GetType("System.Linq.Enumerable"));
// Prints the type name (i.e. it finds it)
Console.WriteLine(Type.GetType("System.Linq.Enumerable, System.Core, "
     + "Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"));

或者,您可以在實用程序項目中將此方法設為通用方法,並讓調用方將類型指定為類型參數嗎?

您可以研究依賴項注入/ ioc容器。

例如,在實用程序庫中創建一個接口,並在Windows服務的特定類中實現該接口。 然后將實例傳遞給實用程序類。 這樣,實用程序庫對Windows服務一無所知。

聽起來像是循環參考問題! 您可能需要重構!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM