问题标签 [simple-injector]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
620 浏览

c# - 简单的 Injector 异步生命周期范围和安全异常

我有一个AsyncCommandHandlerDecorator<TCommand>LifetimeScopedCommandHandlerDecorator<TCommand>如下所示:

我像这样注册装饰器:

但是,当异步进程尝试调用时,我收到此错误:

尝试通过安全透明方法“LifetimeScopedCommandHandlerDecorator`1.Handle(!0)”访问安全关键方法“SimpleInjector.SimpleInjectorLifetimeScopeExtensions.BeginLifetimeScope(SimpleInjector.Container)”失败。

我尝试在and上使用SecurityCritical属性,但没有帮助。请问你有什么想法吗?LifetimeScopedCommandHandlerDecorator.HandleAsyncCommandHandlerDecorator.Handle

更新:

异常是类型MethodAccessException,这里是完整的堆栈跟踪:

在 MYNAMESPACE.LifetimeScopedCommandHandlerDecorator`1.Handle(TCommand 命令)

在 MYNAMESPACE.AsyncCommandHandlerDecorator`1.<>c_ DisplayClass1.b _0(Object _)

在 System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(对象状态)

在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx)

在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx)

在 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()

在 System.Threading.ThreadPoolWorkQueue.Dispatch()

在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

更新 2:

有或没有SecurityCritical属性,问题都存在。

0 投票
1 回答
716 浏览

mvvm - 具有自包含客户端-服务器代码和 IoC 容器的有状态 MVVM 应用程序架构

我有一个具有多个屏幕并与 WCF Web 服务对话的应用程序。我将 SimpleInjector 用于我最喜欢的 IoC 容器,将 Caliburn Micro 用于带有 WPF 的 MMVM。

我有一个单独的类实现,ITransportClient它控制与 Web 服务的连接并发送和接收消息。

该应用程序具有以下状态:

  1. 启动和初始化应用程序。
  2. 显示登录表单。
  3. 登录表单执行与聊天服务器的连接ITransportClient.Login(username, password)
  4. 如果登录成功,则显示一个新的 MainWindow 视图,如果登录失败,则再次提示用户输入凭据。
  5. 登录后,MainWindow 控制发送和接收到 WCF 服务的消息。
  6. 当与服务器失去连接时(由 通知ITransportClientCallback.OnTransportDisconnected),或者当用户单击注销时,登录表单会再次显示。

凭借我现有的技术,这是我的第一个 MVVM 项目,我有以下架构和设计问题:

  1. 我应该使用什么设计模式来控制显示单独的登录屏幕,然后在连接时显示主屏幕,并在连接丢失时恢复到登录屏幕?
  2. 谁应该控制聊天应用程序的连接状态,这段代码应该放在哪里?这个状态会属于引导程序类吗?
  3. 我是否可以将 ITransportClient 注册为持久性实例范围,并在需要时通过注入需要它的 ViewModel 来控制多个表单(即登录表单和主窗口表单)?

ITransportClient界面如下:

连同使用 SimpleInjector 的 Caliburn.Micro 引导程序代码:

0 投票
2 回答
2007 浏览

c# - 如何在多项目解决方案中使用 SimpleInjector 而不创建循环引用

我正在启动一个多项目解决方案,它将有多个入口点,例如 Windows 服务、ASP.NET 网站、WebApi 控制器等。我已经选择了 SimpleInjector,因为它非常快而且我不需要任何高级特征。

我的理解是 SimpleInjector 应该在启动时集中配置。从以下基本示例项目集开始

  • NS.Controllers
  • NS.Core.Data
  • NS.Core.Data.Model
  • NS.Web
  • NS.WindowsService(假设它不会一直运行)

有多个入口点,SimpleInjector 的引导应该去哪里,可以/应该集中处理(在这种情况下,配置过程需要引用所有项目才能设置所有解决方案类)?

我是否应该有一个不引用其他项目的全局实例(例如 NS.Global.Container),并且每个入口点负责在启动时添加自己的实例要求(优雅地处理重复注册,例如 NS.Core.Model)?

我是否应该寻求使用 ResolveUnregisteredType 事件来处理请求的注册?

我只是缺乏一些小学生的知识吗?

更新:

Steven 在下面的评论中提供的链接为这个问题提供了彻底的答案。

在多层应用程序中定位 Ninject 模块的位置

如何在 mvc 站点的类项目部分中初始化 Ninject

0 投票
1 回答
793 浏览

c# - 如何使用 Simple Injector 根据其父级返回实例?

我们一直使用温莎城堡作为我们的 DI 容器,但我们正在寻找替代品。现在我使用了 Simple Injector,到目前为止,它的简单性给我留下了深刻的印象,但我现在遇到的一种情况是,当我们对某些组件使用后期绑定实例化时。

我的第一个问题是,这有可能吗?

温莎就是这样完成的;

有没有办法用简单的注射器做同样的事情?

0 投票
1 回答
1115 浏览

c# - 使用 SimpleInjector 的同一组单例进行多个 RegisterAll 注册

我正在使用 Simple Injector 为电子商务项目构建一个插件系统。我用来注册 a和 a 的RegisterAll所有实现(以及更多)。IPaymentProviderIResourceRegistrar

但这每次都会创建一个新实例。建议RegisterSingle在每种类型上使用。但是在这种情况下如何实现呢?

container.RegisterSingle(type)不起作用,因为同一接口(IPaymentProviderIResourceRegistrar)固有的类型。IPaymentProvider实现类具有不带参数的构造函数,即带IResourceRegistrar参数的构造函数。

我不想做这样的事情,它违背了 IoC 容器的目的

如何在没有丑陋开关的情况下将这些注册为单例?

0 投票
1 回答
1500 浏览

c# - SimpleInjector 可以在运行时为泛型类型注册一个初始化器吗?

我可以在运行时使用 SimpleInjector 为泛型类型注册初始化程序吗?(见下面最后一行代码)

0 投票
1 回答
5340 浏览

c# - 简单的注入器将硬编码的值传递给构造函数

Simple Injector中,我可以执行以下操作:

我在这里做的是说当IAuctionContext找到时,用这个新的AuctionContext. 问题是调用 时RegisterSingle,只会使用一个实例AuctionContext。我希望它能够Uri像上面那样传递参数但没有单个实例但每次都允许一个新实例。

这怎么可能?

0 投票
1 回答
799 浏览

unit-testing - 模拟具有工作单元依赖关系的 ApiController

我有一个Apicontroller依赖于工作单元的对象。如何编写模拟测试用例ApiController哪个依赖于ApiController构造函数中实现的工作单元。

这是代码:

接口控制器:

测试用例:

UoW.Users 中提到的用户类是

Users班级本身是

当我尝试调试测试用例时,测试用例显示对象UoW.Users为空UserController。很明显它没有初始化,WebActivator因为这里没有通过模拟调用 global.asax。现在如何在这种情况下编写一个成功的测试场景,以便WebApicontroller返回带有数据的用户对象?

0 投票
1 回答
2876 浏览

c# - 使用 Simple Injector 的不同配置

我正在使用Simple Injector Dependency Injection 框架,它看起来很酷很漂亮。但是在构建配置并使用它之后,现在我想知道如何从一种配置更改为另一种配置。

场景:假设我在 Global Asax 中设置了一个配置,并且在Container那里有公共和全局实例。现在我想做一些测试,我希望他们使用模拟类,所以我想更改配置。

当然,我可以构建另一个配置并将其分配给Container默认创建的全局配置,这样每次我运行测试时都会设置替代配置。但是在这样做时,尽管我处于开发环境中,但Container每个人的情况都会发生变化,即使是正常请求也是如此。我知道我在这种情况下进行测试,这并不重要,但我觉得这不是这样做的方式......我想知道如何以正确的方式从一种配置更改为另一种配置。

0 投票
2 回答
6511 浏览

c# - 简单注入器:使用基于其父级的构造函数参数注册类型

我目前正在从我的项目中删除 Ninject,并转而使用 Simple Injector,但有一件事我无法正常工作。

对于我的日志记录,在注册服务时,我以前能够将参数传递到我的日志记录类中

我正在寻找一种在 Simple Injector 中重新创建它的方法。到目前为止,除了这个,我还有其他一切工作。通过执行以下操作,我可以使日志记录正常工作,尽管没有显示正确的记录器名称:

有人有做过类似事情的经验吗?