问题标签 [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# - 生命周期范围由 IoC 容器处理的单元测试对象
我正在使用 Microsoft 单元测试并具有以下内容:
我正在使用一个处理对象生命周期范围的 IoC 容器(简单注入器)。Membus 将命令连接到命令处理程序,并通过 IoC 容器进行解析。
上面的代码运行和工作,命令处理程序将它们的局部变量设置为 true。
但是,由于 Simple Injector 处理生命周期范围,我不能向 Simple Injector 询问AccountCommandHandler
对象,因为它会返回一个CreateAccountCommandWasCalled
设置为 false 的新对象。
CreateAccountCommandWasCalled
作为单元测试的新手,除了设置为静态变量之外,还有什么更健壮的测试方法?
dependency-injection - 为什么 Simple Injector 没有像 Unity 这样的 IContainer 抽象?
我在上一个项目中使用了 Unity,总体上很满意。但是基准测试让我认为我可能会在下一个项目中使用 Simple Injector。
但是,Simple Injector 似乎没有其Container
类的接口。这意味着每当我想在方法中使用容器时,我都无法模拟容器进行单元测试。
我很困惑一个真正基于接口起作用的工具,它本身不会成为容器的接口。我知道依赖注入的经典方法除了启动之外不需要容器。(其余的使用构造函数注入。)但我发现当橡胶撞到路时,这并不总是正确的。有时您只需要容器就可以在代码中进行“解析”。
如果我使用 Simple Injector,那么该代码似乎更难进行单元测试。
我对吗?还是我错过了什么?
c# - SimpleInjector RegisterDecorator 方法的 Ninject 等效项
我在 Simple Injector IoC 容器中有以下代码:
我需要把它翻译成 Ninject 等价物。我读过 Ninject 中的装饰器模式是通过该WhenInjectedInto
方法完成的,但整个投标需要像这里这样的 3 个参数:
Simple Injector 中的这种方法只需要 2 个,所以你能告诉我我在这里缺少什么吗?
c# - SimpleInjector 验证 - 是否可以将警告标记为可接受以使 *new* 项目明显?
SimpleInjector 验证功能不时突出显示我需要修复的问题。但是,我确实有一些我很满意的“潜在”问题,我想以某种方式告诉 SimpleInjector 这些都可以,请告诉我其余的...
- 配置警告 已检测到多个组中的警告。
- 潜在生活方式不匹配 1 项服务可能存在 1 处不匹配。
IObjectMaterializedSubscriber ObjectMaterializedSubscriber
(Lifetime Scope) 取决于IEventPublisher
(Transient)。- 潜在的单一职责违规 2 个可能的违规。
ILetterGenerator<A>
LetterGenerator<A>
有 9 个依赖项,这可能表明违反了 SRP。ILetterGenerator<B>
LetterGenerator<B>
有 9 个依赖项,这可能表明违反了 SRP。
作为瞬态的第一个警告IEventPublisher
很好。其他两个警告(我假设)是由我使用 SimpleInjector Decorator 工具构建责任链引起的。
我希望能够将这些特定警告标记为已接受,以便容器可以报告一切似乎都正常!
这可能吗?
c# - 通过 SimpleInjector 注册一个单例并返回相同的实例,对于它实现的不同接口
想象一下我有以下内容:
我希望如果我尝试通过 IoC 获取上述类/接口的任何实例,我会得到完全相同的实例,而不是每种类型一个单例。示例,b1
以下b2
应该是正确的:
这可能吗?
c# - How to register and use different implementation of same interface?
Suppose I have this scenario:
So I would create two ServicePiGreek with channel 0 and 1 and a ServiceEuler with channel 0:
I thought of this:
Does anyone have any better ideas on how to accomplish this?
.net - 我可以将 SimpleInjectors 诊断的结果写入日志文件吗?
使用 SimpleInjector 我在配置结束时调用,并按照文档中的container.Verify()
描述在调试器中获取诊断信息。我想将该信息写入日志文件。有没有办法以编程方式访问它或将记录器或跟踪器挂接到 SimpleInjector 中?
c# - 无法解析从外部 dll 加载的控制器
我正在使用 MVC4 Web API 和 IoC 容器(在这种情况下为简单注入器,但我认为这个问题与该容器无关)构建一个 Web API,它应该公开各种 CRUD 和查询操作。在我的案例中使用 IOC 的原因是我们是一家开发商店,我需要能够让客户构建他们自己的 Web API 控制器来公开他们需要从我们的系统中公开需求的数据。因此,我希望设计我的解决方案,使我能够通过 IOC 将所有控制器(包括我们的和我们的客户的)都放在外部并可以加载,从而使我能够对自己的产品进行测试。
该网站没有对库的任何引用,但该库包含我想在网站中使用的控制器。这些类型在容器中注册,并且 DependencyResolver 设置为自定义依赖解析器。我有找到 dll 插件并加载控制器类型的代码,但是当我尝试导航到它所代表的路线时,它说它找不到它。
即如果我尝试导航到 /api/Test1Api 我应该看到文本“hello world”
我的问题是,虽然我已经加载了控制器类型,但我无法将其转换为网站所说的路径。
我得到错误
未找到与请求 URI 匹配的 HTTP 资源
找不到与名为“Test1Api”的控制器匹配的类型。
这是我注册容器的方式
任何帮助表示赞赏。
c# - 使用 Simple Injector 解析多个具有相同类和接口的对象
我正在尝试在我的新项目中从 Unity 迁移到 Simple Injector。它比 Unity 快得多,我不得不试一试。我有一些颠簸,但没有什么是我无法解决的。但是我用“按键查找”击中了另一个
我读过这篇文章,简单注入器的创建者表示他相信每个接口不需要解析多个类。
我一定是个差劲的程序员,因为我已经用 Unity(它很好地支持它)做到了这一点,并且想在我当前的项目中做到这一点。
我的场景是我有一个 IRepository 接口。我有两个单独的存储库,我想使用 IRepository 接口进行抽象。像这样:
IRepository/GenericRepository 是一种相当常见的抽象,但在 SimpleInjector 中只能有一个
在 Unity 中,我可以注册我的两个存储库,然后设置我的构造函数注入来注入我需要的实例。这是使用实例的密钥完成的。(我不需要Resolve
在我的正常代码中进行调用,也不需要在我的设置之外添加对 Unity 的依赖项。)
使用简单的注射器这是行不通的。但是,无论好坏,Simple Injector 的所有者都认为这个功能是个坏主意。
注意:作者的“应用内”系统看起来像是使用字符串键进行查找,但每次仍然需要不同的类(DefaultRequestHandler
和OrdersRequestHandler
)CustomersRequestHandler
。 我只有一个GenericRepostory
允许我抽象我的存储库方法,而不管我连接到什么。
GenericRepostory
我想每次我想实例化它时我都可以继承我的。或者让它采用我不需要的随机类型参数。但这混淆了我的设计,所以我希望有另一种方法来做到这一点。
那么是否有任何解决方法不让我创建虚假类型来区分我的两个 IRepository/GenericRepository 实例?