跨Web和Winforms /控制台解决方案共享项目的正确方法是什么?
问题描述:
我将.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()
方法的返回值。
答
你开始预处理器困扰你的代码之前,你应该考虑创建一个接口IApplicationConfigurator
或IApplicationStarter
public interface IApplicationStarter
{
string GetPath();
}
并与根据您的应用程序MvcApplicationStarter
或WinformsApplicationStarter
注入它。然后你可以让你的项目库依赖于IApplicationStarter
接口。它应该在项目上需要最少的实现,并且可以将该模式用于其他常见依赖项。看看dependency injection frameworks,因为它需要这种方法进入下一个的水平。
答
这是类库的用途。创建一个类库项目,将所有常用位移到那里,然后有一个单独的WinForms和MVC项目,它们都引用了你的类库。
具体来说,这些类将具有相同的代码,但仍然能够根据实例化它们而得到不同的结果? – user1 2013-03-05 21:52:12
但是你喜欢。最简单的方法是在构造函数中传递区分符。 – 2013-03-05 21:57:44