跨Web和Winforms /控制台解决方案共享项目的正确方法是什么?

时间:2013-03-05 21:22:26

标签: 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则使用。

我希望这两个解决方案都使用相同的项目,并且这些项目尽可能少地修改,因为它们很大,很旧,而且相对没有文档。解决这个问题的正确方法是什么?

现在我想我会为每个定义WEB的项目创建一个新配置,然后使用#if/#else语句来包含正确的依赖关系并定义getPath()方法的返回值

2 个答案:

答案 0 :(得分:1)

这是类库的用途。创建一个类库项目,移动那里的所有公共位,然后有一个单独的WinForms和MVC项目,它们都引用你的类库。

答案 1 :(得分:1)

在开始使用预处理器来编写代码之前,您应该考虑创建一个接口IApplicationConfiguratorIApplicationStarter

public interface IApplicationStarter
{
    string GetPath();
}

根据您的应用,使用MvcApplicationStarterWinformsApplicationStarter注入。然后,您可以让项目库依赖IApplicationStarter接口。它应该需要在项目上实现最少的实现,并且您可以将该模式重用于其他常见的依赖项。查看dependency injection frameworks,因为它将此方法引入 next 级别。