2011-10-06 96 views
5

我想在C#應用程序中獲取有關Assembly的信息。我使用以下內容:獲得程序集上的信息

Assembly.GetCallingAssembly(); 

這可以完美地返回調用程序集的信息。

我想與其他應用程序共享此功能,所以我將它包含在我的類庫中的一個類中。

我在多個應用程序中引用此類庫。當我從我的應用程序調用此方法時,它將返回有關類庫而不是應用程序的信息。有沒有一種方法可以改變我的上面的代碼來返回Web應用程序程序集上的信息,同時仍然將代碼包含在類庫中?

+0

你可能會問一個問題太低。你想達到什麼目的? –

回答

3

而不是讓類庫變得聰明,爲什麼你沒有調用者通過一個Assembly作爲該方法的參數?所以當你從某個應用程序中調用方法時,你會通過Assembly.GetExecutingAssembly(),類庫中的方法現在可以獲取實際調用者的程序集。

0

我不確定你在反射之上提供了什麼,但也許你正在抽象一個不需要抽象的工具。思考已經處理了這個,所以爲什麼不讓它做它的工作?

但是,如果這個API給你一些有用的信息(比如插入到你的數據庫等),那麼你的方法可能是有道理的。但我仍然建議您重構它:

  • 將此代碼放在一個共享的項目/程序集中,並且只需在需要調用該功能時鏈接該項目/程序集即可。需要duplicate code才能完成您的工作被認爲是code smell
  • Assembly對象作爲參數,而不是試圖確定當前的組件。這樣可以提供更大的靈活性,以便在您想出一些代碼時想要獲得一堆程序集中的數據,並且仍然允許您傳遞當前程序集。 (注意:達林已經提出了這一點)