Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 跨Web和Winforms/console解决方案共享项目的正确方式是什么?_Asp.net Mvc_Winforms_Visual Studio - Fatal编程技术网

Asp.net mvc 跨Web和Winforms/console解决方案共享项目的正确方式是什么?

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 我更希望这两个解决方案使用相同的项目,并且这些项目被修改得尽

我正在将.NET 2.0 Winforms应用程序转换为ASP.NET MVC3。Winforms解决方案使用多个项目进行业务逻辑,MVC应用程序包括这些项目。各种Windows控制台应用程序也使用这些项目

问题是,这些项目使用
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
接口。它应该需要在项目上最少的实现,并且您可以将该模式重用于其他常见的依赖项。当它将这种方法带入下一个层次时,请仔细研究。

具体来说,这些类如何拥有相同的代码,但根据实例化它们的内容,仍然能够获得不同的结果?不管您喜欢什么。最简单的方法是在构造函数中传递一个微分器。