Asp.net mvc 跨Web和Winforms/console解决方案共享项目的正确方式是什么?
我正在将.NET 2.0 Winforms应用程序转换为ASP.NET MVC3。Winforms解决方案使用多个项目进行业务逻辑,MVC应用程序包括这些项目。各种Windows控制台应用程序也使用这些项目 问题是,这些项目使用Asp.net mvc 跨Web和Winforms/console解决方案共享项目的正确方式是什么?,asp.net-mvc,winforms,visual-studio,Asp.net Mvc,Winforms,Visual Studio,我正在将.NET 2.0 Winforms应用程序转换为ASP.NET MVC3。Winforms解决方案使用多个项目进行业务逻辑,MVC应用程序包括这些项目。各种Windows控制台应用程序也使用这些项目 问题是,这些项目使用System.Windows.Forms.Application.StartupPath查找它们使用的文件,而对于web开发,则使用System.web.HttpRunTime.AppDomainAppPath 我更希望这两个解决方案使用相同的项目,并且这些项目被修改得尽
System.Windows.Forms.Application.StartupPath
查找它们使用的文件,而对于web开发,则使用System.web.HttpRunTime.AppDomainAppPath
我更希望这两个解决方案使用相同的项目,并且这些项目被修改得尽可能少,因为它们是大的、旧的,并且相对没有文档记录。解决这个问题的正确方法是什么
现在我想我应该为每个项目创建一个新的配置来定义WEB,然后使用
\if/\else
语句来包含正确的依赖性,并定义getPath()
方法的返回。这就是类库的用途。创建一个类库项目,移动所有的公共位,然后有一个单独的WiFrm和MVC项目同时引用类库。 < p>在使用预处理器启动代码之前,您应该考虑创建一个接口<代码> IApplicationConfigurator < /代码>或<代码> IApplicationStarter < /代码>
public interface IApplicationStarter
{
string GetPath();
}
并根据您的应用程序,向其注入
mvcapapplicationstarter
或WinformsApplicationStarter
。然后,您可以让项目库依赖于iaapplicationstarter
接口。它应该需要在项目上最少的实现,并且您可以将该模式重用于其他常见的依赖项。当它将这种方法带入下一个层次时,请仔细研究。具体来说,这些类如何拥有相同的代码,但根据实例化它们的内容,仍然能够获得不同的结果?不管您喜欢什么。最简单的方法是在构造函数中传递一个微分器。