问题标签 [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.
c# - 简单的 Injector 异步生命周期范围和安全异常
我有一个AsyncCommandHandlerDecorator<TCommand>
和LifetimeScopedCommandHandlerDecorator<TCommand>
如下所示:
我像这样注册装饰器:
但是,当异步进程尝试调用时,我收到此错误:
尝试通过安全透明方法“LifetimeScopedCommandHandlerDecorator`1.Handle(!0)”访问安全关键方法“SimpleInjector.SimpleInjectorLifetimeScopeExtensions.BeginLifetimeScope(SimpleInjector.Container)”失败。
我尝试在and上使用SecurityCritical
属性,但没有帮助。请问你有什么想法吗?LifetimeScopedCommandHandlerDecorator.Handle
AsyncCommandHandlerDecorator.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
属性,问题都存在。
mvvm - 具有自包含客户端-服务器代码和 IoC 容器的有状态 MVVM 应用程序架构
我有一个具有多个屏幕并与 WCF Web 服务对话的应用程序。我将 SimpleInjector 用于我最喜欢的 IoC 容器,将 Caliburn Micro 用于带有 WPF 的 MMVM。
我有一个单独的类实现,ITransportClient
它控制与 Web 服务的连接并发送和接收消息。
该应用程序具有以下状态:
- 启动和初始化应用程序。
- 显示登录表单。
- 登录表单执行与聊天服务器的连接
ITransportClient.Login(username, password)
。 - 如果登录成功,则显示一个新的 MainWindow 视图,如果登录失败,则再次提示用户输入凭据。
- 登录后,MainWindow 控制发送和接收到 WCF 服务的消息。
- 当与服务器失去连接时(由 通知
ITransportClientCallback.OnTransportDisconnected
),或者当用户单击注销时,登录表单会再次显示。
凭借我现有的技术,这是我的第一个 MVVM 项目,我有以下架构和设计问题:
- 我应该使用什么设计模式来控制显示单独的登录屏幕,然后在连接时显示主屏幕,并在连接丢失时恢复到登录屏幕?
- 谁应该控制聊天应用程序的连接状态,这段代码应该放在哪里?这个状态会属于引导程序类吗?
- 我是否可以将 ITransportClient 注册为持久性实例范围,并在需要时通过注入需要它的 ViewModel 来控制多个表单(即登录表单和主窗口表单)?
ITransportClient
界面如下:
连同使用 SimpleInjector 的 Caliburn.Micro 引导程序代码:
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 在下面的评论中提供的链接为这个问题提供了彻底的答案。
c# - 如何使用 Simple Injector 根据其父级返回实例?
我们一直使用温莎城堡作为我们的 DI 容器,但我们正在寻找替代品。现在我使用了 Simple Injector,到目前为止,它的简单性给我留下了深刻的印象,但我现在遇到的一种情况是,当我们对某些组件使用后期绑定实例化时。
我的第一个问题是,这有可能吗?
温莎就是这样完成的;
有没有办法用简单的注射器做同样的事情?
c# - 使用 SimpleInjector 的同一组单例进行多个 RegisterAll 注册
我正在使用 Simple Injector 为电子商务项目构建一个插件系统。我用来注册 a和 a 的RegisterAll
所有实现(以及更多)。IPaymentProvider
IResourceRegistrar
但这每次都会创建一个新实例。建议RegisterSingle
在每种类型上使用。但是在这种情况下如何实现呢?
container.RegisterSingle(type)
不起作用,因为同一接口(IPaymentProvider
或IResourceRegistrar
)固有的类型。IPaymentProvider
实现类具有不带参数的构造函数,即带IResourceRegistrar
参数的构造函数。
我不想做这样的事情,它违背了 IoC 容器的目的
如何在没有丑陋开关的情况下将这些注册为单例?
c# - SimpleInjector 可以在运行时为泛型类型注册一个初始化器吗?
我可以在运行时使用 SimpleInjector 为泛型类型注册初始化程序吗?(见下面最后一行代码)
c# - 简单的注入器将硬编码的值传递给构造函数
在Simple Injector中,我可以执行以下操作:
我在这里做的是说当IAuctionContext
找到时,用这个新的AuctionContext
. 问题是调用 时RegisterSingle
,只会使用一个实例AuctionContext
。我希望它能够Uri
像上面那样传递参数但没有单个实例但每次都允许一个新实例。
这怎么可能?
unit-testing - 模拟具有工作单元依赖关系的 ApiController
我有一个Apicontroller
依赖于工作单元的对象。如何编写模拟测试用例ApiController
哪个依赖于ApiController
构造函数中实现的工作单元。
这是代码:
接口控制器:
测试用例:
UoW.Users 中提到的用户类是
而Users
班级本身是
当我尝试调试测试用例时,测试用例显示对象UoW.Users
为空UserController
。很明显它没有初始化,WebActivator
因为这里没有通过模拟调用 global.asax。现在如何在这种情况下编写一个成功的测试场景,以便WebApicontroller
返回带有数据的用户对象?
c# - 使用 Simple Injector 的不同配置
我正在使用Simple Injector Dependency Injection 框架,它看起来很酷很漂亮。但是在构建配置并使用它之后,现在我想知道如何从一种配置更改为另一种配置。
场景:假设我在 Global Asax 中设置了一个配置,并且在Container
那里有公共和全局实例。现在我想做一些测试,我希望他们使用模拟类,所以我想更改配置。
当然,我可以构建另一个配置并将其分配给Container
默认创建的全局配置,这样每次我运行测试时都会设置替代配置。但是在这样做时,尽管我处于开发环境中,但Container
每个人的情况都会发生变化,即使是正常请求也是如此。我知道我在这种情况下进行测试,这并不重要,但我觉得这不是这样做的方式......我想知道如何以正确的方式从一种配置更改为另一种配置。
c# - 简单注入器:使用基于其父级的构造函数参数注册类型
我目前正在从我的项目中删除 Ninject,并转而使用 Simple Injector,但有一件事我无法正常工作。
对于我的日志记录,在注册服务时,我以前能够将参数传递到我的日志记录类中
我正在寻找一种在 Simple Injector 中重新创建它的方法。到目前为止,除了这个,我还有其他一切工作。通过执行以下操作,我可以使日志记录正常工作,尽管没有显示正确的记录器名称:
有人有做过类似事情的经验吗?