我有兩個調用類庫的項目。我可以在我的班級圖書館檢查哪個項目正在調用圖書館嗎?c#:檢查哪個項目正在調用類庫
回答
嗯...這聽起來不太好。你試圖實現的是從你的類庫創建一個依賴項 - >項目,而不是項目 - >類庫依賴項。
從我的觀點來看,這是「不可」實現的,如果是這樣的話,那麼很難實現。一個好的類庫應該具有通用性,並且不應該根據調用者來改變行爲。
(也許你可以詳細描述你的問題的性質,所以我可以幫助你更好地找到一個更好的解決方案)
雖然好的類庫應該具有通用性,但如果類庫是應用程序的一部分並且不打算在別處使用,那肯定不是這樣。另一方面,即使這樣的圖書館應該改變行爲只有*當給予不同的參數*。 – OregonGhost 2009-11-26 09:29:52
我同意。在談論類圖書館時,我總是想到一個通用的,可重用的構造。鑑於他說圖書館被2個項目訪問,我認爲它是通用的。一個類庫可能依賴於某種配置,但決不會因爲自己做出決定而有所不同。配置的設置應始終來自外部。 – Juri 2009-11-26 10:43:27
如果項目有不同的命名空間,你可以使用StackTrace
建立自己的調用堆棧:
public static void Main()
{
StackTrace stackTrace = new StackTrace();
StackFrame[] stackFrames = stackTrace.GetFrames();
foreach (StackFrame stackFrame in stackFrames)
{
Console.WriteLine(stackFrame.GetMethod().Name);
}
}
爲什麼不存儲在app.config文件中每個項目的唯一值,然後從類庫中看到它的值。根據你正在運行的項目(應用程序),它應該選擇正確的應用程序配置。或者即使只是檢查System.Reflection.Assembly.GetCallingAssembly().GetName().Name()
執行程序集不是包含調用GetExecutingAssembly()的代碼的程序集嗎?即如果你在庫裝配中調用它,你會得到你的庫裝配 - 但仍然存在GetCallingAssembly,這可能是你的意思:) – OregonGhost 2009-11-26 09:32:13
+1對於GetExecutingAssembly – ScottS 2009-11-26 09:42:48
@OregonGhost我不好! – James 2009-11-26 09:48:09
如果您在安全(以某種方式)後,.NET Code Access Security可能是你想要的。
,如果你正在尋找的是主應用程序組件,那麼正確的呼叫Assembly.GetEntryAssembly()。全名 只是我的2¢
Assembly.GetCallingAssembly()會給你的程序集的引用它調用了你放置那行代碼的方法。我認爲這正是你所要求的,但圖書館應該關心其調用者的情況非常罕見,所以你可能想要考慮這種方法是否確實是正確的。
// in Assembly 1
public class Assembly1Class
{
public void SomeMethod()
{
assembly2ClassInstance.SomeAPIMethod();
}
}
// in Assembly 2 (the library)
public class Assembly2Class
{
public void SomeAPIMethod()
{
Debug.WriteLine(Assembly.GetCallingAssembly().FullName;
}
}
- 1. 如何檢查在Django項目中使用哪個數據庫
- 2. 查看哪個項目正在調用表格
- 3. 找出哪個類正在調用函數 - iOS,目標C
- 4. 檢查選擇了哪個項目?
- 5. 從另一個項目C調用類#
- 6. 如何檢查哪個IIS應用程序正在調用數據庫
- 7. 在c#中使用vb.net類庫項目
- 8. 如何檢查在Rails項目中使用哪個SAML版本?
- 9. 請檢查您目前正在使用哪個網址
- 10. 如何檢查我正在使用哪個GWT庫
- 11. 檢查哪個UITextField正在觸發textFieldShouldBeginEditing調用
- 12. 檢查庫項目與JSFL
- 13. 如何檢查我在C#中調用哪個按鈕?
- 14. 如何檢查一個項目在Swift 2中的哪一個類?
- 15. 從庫項目C訪問項目類#
- 16. winapi listview檢查項目C++
- 17. 檢查哪個Visual Studio版本是使用C#代碼運行的項目
- 18. 檢查的目錄項在C
- 19. 檢查Page_Load在ResultsRepeater上點擊了哪個項目
- 20. 哪種方式檢查清單中的項目是否正確
- 21. 如何在C++中找到哪個子類正在調用父類的函數?
- 22. C# - 在檢查特定項目時自動檢查checkedlistbox中的項目
- 23. 我有一個用戶可以檢查的項目列表,如何跟蹤哪些項目被檢查?
- 24. 檢查哪個類是使用的Android庫的API
- 25. C#庫項目在多個項目中使用
- 26. 檢查哪些端口正在使用
- 27. 如何從庫項目調用主項目中的類/方法?
- 28. 使用C *在C .so庫++項目(Ubuntu的)使用C *在C項目(Ubuntu的)
- 29. C#測試項目和C#類庫之間的區別項目
- 30. 在C#項目中調用C++方法
我可以問 - 你想解決什麼設計問題?反思永遠不會是正確的答案...... – Kobi 2009-11-26 09:17:45
@Kobi:雖然我同意你的觀點,即Reflection可能不是解決這個問題的答案,但總的來說,有很多問題只能通過Reflection或者Reflection才能解決。我在這裏至少有兩個依賴Reflection的應用程序,因爲沒有其他方法。所以我不同意Reflection *從不*是正確的答案。 – OregonGhost 2009-11-26 09:25:42
@Kobi,反思可以被濫用,但它是一堆問題的「正確」答案。如果有什麼我看到它越來越普遍地出現。看看http://stackoverflow.com/questions/49737/use-cases-for-reflection關於它在哪裏非常有用的一些想法。 – ScottS 2009-11-26 09:38:58