Tag: 简单注入器

Winforms – MVP模式:使用静态ApplicationController来协调应用程序?

背景 我正在构建一个双层C#.net应用程序: 第1层:使用MVP(Model-View-Presenter)设计模式Winforms客户端应用程序。 第2层:位于Entity Framework和SQL Server之上的WebAPI RESTful服务。 目前,我对Winforms客户端应用程序的整体架构有疑问。 我是编程新手(大约一年),但我在这个应用程序上取得了很好的进展。 我想退后一步,重新评估我目前的做法,检查我是否正朝着正确的方向前进。 应用领域 Winforms应用程序是一个相当简单的安全人员跟踪应用程序。 主视图(表单)是应用程序的焦点,并且具有将内容分组为function区域的不同部分(例如,用于跟踪人员调度的部分,用于跟踪分配到何处的人的部分等)。 应用程序侧面的菜单启动辅助视图(例如历史记录,统计信息,联系人等)。 这个想法是安全办公室可以使用该应用程序来组织日常操作,然后在数据库中保留所有内容的详细历史记录,以便将来进行报告。 技术细节 如前所述,Winforms客户端是使用MVP模式(被动视图)构建的,重点是尽可能多地使用dependency injection(通过SimpleInjector IoC容器)。 每个视图(表单)都与一个演示者配对。 视图实现接口,允许演示者控制视图(无论具体实现如何)。 该视图会引发演示者订阅的事件。 目前,不允许演示者直接与另一位演示者通信。 应用程序控制器用于协调应用程序。 这是我的应用程序架构的领域,我是最不明智的(因此是post标题)。 应用程序控制器目前用于: 打开新视图(表单)并管理打开的表单。 通过事件聚合器促进应用程序组件之间的通信。 一位演示者发布一个事件,任何数量的演示者都可以订阅该事件。 主机会话信息(即安全上下文/登录,配置数据等) 在应用程序启动时,IoC容器已注册到应用程序控制器中。 例如,这允许应用程序控制器从容器创建演示者,然后由容器自动处理所有后续依赖项(视图,服务等)。 题 为了使所有演示者都可以访问Application Controller,我将控制器创建为静态类。 public static class ApplicationController { private static Session _session; private static INavigationWorkflow _workflow; private static EventAggregator _aggregator; #region Registrations public […]

如何使用Simple Injector依赖项的WPF控件

我想在我必须将资源注入GUI控件的场景中使用dependency injection。 因为这可能是错误的地方,我有一些理由在这里做而不是在视图模型中(例如,我需要Window句柄等)。 构造函数参数注入似乎是首选方式。 正如大多数人所知,WPF控件必须具有无参数构造函数,否则XAML不起作用,对于当前场景,我喜欢保留我的XAML,因为它包含一些名称注册和绑定。 那么:我如何在WPF + XAML场景中使用构造函数-DI(如果可能的话,在Simple Injector的情况下)? 是否存在标记扩展,或者XAML解析器是否可以成为Container-Aware并接受具有参数的构造函数作为控件? 方案示例: 和: public class WhateverResourceNeedingViewer : ItemsControl { public WhateverResourceNeedingViewer(Dep1 d, DepResource d2) { … } … }

dependency injection(使用SimpleInjector)和OAuthAuthorizationServerProvider

对dependency injection的新手,所以这可能是一件简单的事情,但我已经尝试过并且无法弄明白,我正在使用Simple Injector。 我有一个完全使用SimpleInjector的WebApi,现在我想使用OAuth实现安全性。 为此,我开始学习本教程,这非常有用,但不使用Dependancy Injection Token Based Authentication using ASP.NET Web API 2, Owin, and Identity 我的global.asax文件看起来像这样,设置dependency injection(完美工作) protected void Application_Start() { SimpleInjectorConfig.Register(); GlobalConfiguration.Configure(WebApiConfig.Register); } 我创建了一个Startup.Auth.cs文件来配置OAuth public class Startup { public void Configuration(IAppBuilder app) { var OAuthServerOptions = new OAuthAuthorizationServerOptions() { AllowInsecureHttp = true, TokenEndpointPath = new PathString(“/token”), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), Provider = new […]

如何配置Simple Injector以在ASP.NET MVC中运行后台线程

我正在使用Simple Injector来管理我注入的依赖项的生命周期(在本例中为UnitOfWork ),我很高兴有一个单独的装饰器而不是我的服务或命令处理程序,在保存和处理之后,在编写业务时使代码更容易逻辑层(我遵循本博文中概述的架构)。 通过在构造根容器的构造过程中使用Simple Injector MVC NuGet包和以下代码,上面的工作完美(并且非常容易),如果图中存在多个依赖项,则相同的实例将全部注入 – 完美的entity framework模型上下文。 private static void InitializeContainer(Container container) { container.RegisterPerWebRequest(); // register all other interfaces with: // container.Register(); } 我现在需要运行一些后台线程,并从Simple Injector 文档中了解可以代理命令的线程 ,如下所示: public sealed class TransactionCommandHandlerDecorator : ICommandHandler { private readonly ICommandHandler handlerToCall; private readonly IUnitOfWork unitOfWork; public TransactionCommandHandlerDecorator( IUnitOfWork unitOfWork, ICommandHandler decorated) { this.handlerToCall = decorated; […]