2013-03-05 76 views
0

我將.NET 2.0 Winforms應用程序轉換爲ASP.NET MVC3。 Winforms解決方案爲業務邏輯使用多個項目,而MVC應用程序包含這些項目。這些項目也被各種Windows控制檯應用程序使用。跨Web和Winforms /控制檯解決方案共享項目的正確方法是什麼?

問題是這些項目使用System.Windows.Forms.Application.StartupPath找到他們使用的文件,而對於web開發System.Web.HttpRunTime.AppDomainAppPath被使用。

我寧願兩個解決方案都使用相同的項目,並且這些項目的修改儘可能少,因爲它們很大,很舊,而且相對沒有記錄。解決這個問題的正確方法是什麼?

現在我想我會創建一個新的配置,每個項目將定義WEB,然後使用#if/#else語句包含正確的依賴關係並定義getPath()方法的返回值。

回答

1

你開始預處理器困擾你的代碼之前,你應該考慮創建一個接口IApplicationConfiguratorIApplicationStarter

public interface IApplicationStarter 
{ 
    string GetPath(); 
} 

並與根據您的應用程序MvcApplicationStarterWinformsApplicationStarter注入它。然後你可以讓你的項目庫依賴於IApplicationStarter接口。它應該在項目上需要最少的實現,並且可以將該模式用於其他常見依賴項。看看dependency injection frameworks,因爲它需要這種方法進入下一個的水平。

1

這是類庫的用途。創建一個類庫項目,將所有常用位移到那裏,然後有一個單獨的WinForms和MVC項目,它們都引用了你的類庫。

+0

具體來說,這些類將具有相同的代碼,但仍然能夠根據實例化它們而得到不同的結果? – user1 2013-03-05 21:52:12

+1

但是你喜歡。最簡單的方法是在構造函數中傳遞區分符。 – 2013-03-05 21:57:44

相關問題