2008-10-16 82 views
0

通用圖書館知道上下文--a.k.a.調用應用程序的最佳方式是什麼?我處在一個非常受控制的企業環境中...有沒有更好的方式讓圖書館知道它從哪裏調用的應用程序,而不是讀取配置文件中的設置?你對這種事情有什麼用途?獲取應用程序名稱/編號的最佳做法

//the rest of the story
我在一家財富500強制造公司的Intranet團隊工作。我創建了一個共同的庫,所有新的.Net應用程序都可以使用它。它向公共數據庫查詢關於該應用程序的信息以及與該問題無關的其他一些事情。如你所想,公共庫需要知道應用程序調用它。我可以強制每個應用程序在一些靜態類或其他東西上設置屬性,但是我想在幕後做更多的事情。目前,它需要開發人員使用ApplicationName的鍵和值 - 你猜對了 - 應用程序名稱(這是我們唯一不變的ID)在app.config或web.config中設置一個設置。然後它使用目前它使用ConfigurationManager.AppSettings["ApplicationName"]將其拉入。

回答

3

可能有辦法做到這一點。因爲我根本不打算回答你的實際問題,所以我很可能會因此而拒絕投票,但是我不能沒有說什麼就繼續前進。對我來說,這是可能的最糟糕的耦合的一個例子。您實際上必須查看數據庫,並根據調用它的應用程序採取不同的行爲?

+0

是的。我們已經爲連接信息,依賴關係,安全性和其他一些東西實施了一箇中央存儲庫。當應用程序要求連接時,它需要知道哪個應用程序要求連接。是的,應用程序可以通過它,但這似乎是一種浪費。 – 2008-10-16 22:11:07

0

getenv()會得到你的環境變量,反過來應該給你你想要的。但一般來說,取決於調用程序的名稱具有不同的行爲是而不是被認爲是最佳實踐。如果您想在日誌消息中打印調用程序的名稱,則會出現異常。當然還有其他例外,你的情況可能就是其中之一。

您也可以通過進程ID(w/getpid())獲取信息。

0

我在這裏同意EBGreen。這是一個紅旗問題給我。這就是說,我建議做與你所建議的完全相反的內容,並簡單地將密鑰(應用程序名稱或其他)作爲參數傳遞給你所調用的函數。無論你是入口點,你都可以將它作爲公共靜態屬性燒入程序中,並且創建一個基本上重載調用庫的輔助函數。這將隱藏它,並減少容易出錯的重複。更好的是,你也可以讓你的入口點類實現一個接口,它有一個方法來獲取應用程序名稱(它只是返回一個字符串常量)和設置方法從數據庫返回的值..稱之爲「IIntranetApp」或其他。然後,您只需將「this」傳遞給期望「IIntranetApp」的函數,並且它會神奇地填充您的中央回購所需的空白。

喜歡的東西:

public interface IIntranetApp 
{ 
    string GetApplicationName(); 
    void SetConnectionString(string connectionString); 
    // etc... add methods as necessary 
} 
1

你也可以只調用Assembly.GetEntryAssembly公用庫類中。

然後使用返回程序集中的.Name屬性。

這意味着那些,你的appsettings表(或其它)需要用程序集名稱來鍵入,並且如果程序集名稱應該改變,它會全部中斷。這意味着你在這裏的命名/鍵選擇稍微不靈活。

+0

它也需要爲asp.net網絡應用程序工作。我可以通過閱讀部分URL來完成,但這似乎仍然不正確。 – 2008-10-17 13:40:17

相關問題