背景
我正在构建一个两层的 C# .net 应用程序:
如果您想了解我正在构建的应用程序的更多详细信息,我在这里给出的解释可能过于彻底。
当前发展
目前,我正在 Winforms 客户端上工作。特别是,我正在尝试在此客户端中散列命令模式的适当实现。我有幸偶然发现了这篇出色的博客文章,其中概述了一个可靠的命令架构。为了补充那篇文章,作者接着解释了他如何将查询与命令分开。阅读这些博客后,很明显我的第 2 层(Web api 服务)将从实现这两个中受益匪浅。通用实现允许极好的灵活性、可测试性和可扩展性。
题
我不太清楚的是我如何在 winforms 客户端(第 1 层)上实现这些模式。此处是否继续将查询和命令视为分开的?考虑一个基本操作,例如登录尝试。这是查询还是命令?最终,您需要从 Web 服务返回数据(服务器上的用户信息),因此我认为这是一个查询。另一种情况如何,例如创建新用户的请求。我知道您将创建一个命令对象来存储用户信息并将其发送给服务。命令应该是即发即忘,但您是否不想从服务中获得某种命令是否成功的确认?此外,如果命令处理程序返回 void,
归根结底,对于任何给定的 UI 任务(比如用户创建请求),是否最终会得到一个基于 winforms 客户端的查询/命令,以及命令/查询的 web api 服务版本哪个处理那方面的请求?
背景
我正在构建一个winforms应用程序,我正在使用IoC容器(SimpleInjector)来注册我的类型.在我的应用程序中,大多数屏幕(即表单)在任何给定时间只有一个实例.
问题
对于在任何给定时间只需要一个实例的表单,我可以将它们注册为单例:
container.Register<IHomeView, HomeView>(Lifestyle.Singleton);
Run Code Online (Sandbox Code Playgroud)
这允许我使用容器来跟踪所有表单.但是,在这种情况下,当表单被关闭时,它将被释放(表单实现IDisposable).如果应用程序尝试使用容器再次打开该表单,则将处置该表单的容器实例,并抛出异常.
题
处理这个问题的正确方法是什么?我目前看到两种解决方案:
我可以通过在验证期间抑制诊断警告来解决问题b).
registration = container.GetRegistration(typeof(ILoginView)).Registration;
registration.SuppressDiagnosticWarning(
DiagnosticType.DisposableTransientComponent,
"Winforms registration supression.");
Run Code Online (Sandbox Code Playgroud)
在这里采取正确的方法是什么?我错过了什么吗?