我正在将.NET 2.0 Winforms应用程序转换为ASP.NET MVC3。 Winforms解决方案使用多个项目用于业务逻辑,MVC应用程序包括这些项目。这些项目也被各种Windows控制台应用程序使用。
问题是这些项目使用System.Windows.Forms.Application.StartupPath
来查找他们使用的文件,而对于Web开发System.Web.HttpRunTime.AppDomainAppPath
则使用。
我希望这两个解决方案都使用相同的项目,并且这些项目尽可能少地修改,因为它们很大,很旧,而且相对没有文档。解决这个问题的正确方法是什么?
现在我想我会为每个定义WEB的项目创建一个新配置,然后使用#if/#else
语句来包含正确的依赖关系并定义getPath()
方法的返回值
答案 0 :(得分:1)
这是类库的用途。创建一个类库项目,移动那里的所有公共位,然后有一个单独的WinForms和MVC项目,它们都引用你的类库。
答案 1 :(得分:1)
在开始使用预处理器来编写代码之前,您应该考虑创建一个接口IApplicationConfigurator
或IApplicationStarter
public interface IApplicationStarter
{
string GetPath();
}
根据您的应用,使用MvcApplicationStarter
或WinformsApplicationStarter
注入。然后,您可以让项目库依赖IApplicationStarter
接口。它应该需要在项目上实现最少的实现,并且您可以将该模式重用于其他常见的依赖项。查看dependency injection frameworks,因为它将此方法引入 next 级别。