如何将View逻辑设计到c#项目中

use*_*673 5 c# architecture console winforms

我的解决方案中有三个c#项目.一个是控制台应用程序,只需调用类库项目.类库项目执行应用程序的所有处理.然后有一个WinForm项目显示一个表单,然后当按下一个按钮时,调用类库项目中的相同逻辑.因此,有两种方法可以通过控制台或Windows UI(WinForm)运行逻辑.

我的问题是通过类库逻辑的一部分,如果正在使用UI应用程序,我想要一个自定义的WinForm表单来向用户询问一个问题.

在控制台应用程序中,我希望逻辑中的相同位置可以简单地写入控制台.在我对架构的理解中,您不希望类库项目包含WinForm逻辑,并要求它引用所有WinForm引用.但是如何调用WinForms项目(或其他东西)来显示自定义WinForm表单?将有一个循环引用,其中类库将引用主WinForm应用程序,WinForm应用程序将引用类库项目.

这样做的标准方法是什么?

Ric*_*end 2

您可以创建一个由库定义的接口来与调用者进行通信,然后让两个调用应用程序定义自己的该接口的实现,库调用该接口上的方法并且对实现一无所知。

调用者相应地处理方法......

public interface IProgressReporter
{
       void ReportMessage(string message);
}



public class WinFormsProgressReporter : IProgressReporter
{
    public void ReportMessage(string message)
    {
          MessageBox.SHow(message);
    }
}

public class ConsoleAppProgressReporter : IProgressReporter
{
    public void ReportMessage(string message)
    {
          Console.WriteLine(message);
    }
}

public class LibraryClass
{
    public static void SomeMethod(IProgressReporter rep)
    {
         rep.ReportMessage("Wooooohooooo!");
    }
}
Run Code Online (Sandbox Code Playgroud)