问题标签 [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 投票
4 回答
2258 浏览

c# - 生命周期范围由 IoC 容器处理的单元测试对象

我正在使用 Microsoft 单元测试并具有以下内容:

我正在使用一个处理对象生命周期范围的 IoC 容器(简单注入器)。Membus 将命令连接到命令处理程序,并通过 IoC 容器进行解析。

上面的代码运行和工作,命令处理程序将它们的局部变量设置为 true。

但是,由于 Simple Injector 处理生命周期范围,我不能向 Simple Injector 询问AccountCommandHandler对象,因为它会返回一个CreateAccountCommandWasCalled设置为 false 的新对象。

CreateAccountCommandWasCalled作为单元测试的新手,除了设置为静态变量之外,还有什么更健壮的测试方法?

0 投票
2 回答
2918 浏览

dependency-injection - 为什么 Simple Injector 没有像 Unity 这样的 IContainer 抽象?

我在上一个项目中使用了 Unity,总体上很满意。但是基准测试让我认为我可能会在下一个项目中使用 Simple Injector。

但是,Simple Injector 似乎没有其Container类的接口。这意味着每当我想在方法中使用容器时,我都无法模拟容器进行单元测试。

我很困惑一个真正基于接口起作用的工具,它本身不会成为容器的接口。我知道依赖注入的经典方法除了启动之外不需要容器。(其余的使用构造函数注入。)但我发现当橡胶撞到路时,这并不总是正确的。有时您只需要容器就可以在代码中进行“解析”。

如果我使用 Simple Injector,那么该代码似乎更难进行单元测试。

我对吗?还是我错过了什么?

0 投票
2 回答
670 浏览

c# - SimpleInjector RegisterDecorator 方法的 Ninject 等效项

我在 Simple Injector IoC 容器中有以下代码:

我需要把它翻译成 Ninject 等价物。我读过 Ninject 中的装饰器模式是通过该WhenInjectedInto方法完成的,但整个投标需要像这里这样的 3 个参数:

Simple Injector 中的这种方法只需要 2 个,所以你能告诉我我在这里缺少什么吗?

0 投票
1 回答
228 浏览

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 工具构建责任链引起的。

我希望能够将这些特定警告标记为已接受,以便容器可以报告一切似乎都正常!

这可能吗?

0 投票
1 回答
2688 浏览

c# - 通过 SimpleInjector 注册一个单例并返回相同的实例,对于它实现的不同接口

想象一下我有以下内容:

我希望如果我尝试通过 IoC 获取上述类/接口的任何实例,我会得到完全相同的实例,而不是每种类型一个单例。示例,b1以下b2应该是正确的:

这可能吗?

0 投票
1 回答
607 浏览

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?

0 投票
1 回答
700 浏览

asp.net-web-api - Web API 自托管应用程序和 Simple Injector 中的 LifetimeScoping 错误

我阅读了这些(++++)页面,但我不知道该怎么做。

我有这个简单的界面和具体类型:

我创建了这个DependencyResolver

我这样配置我的服务器:

这是我的控制器:

现在,当我调用 action 方法时,我得到了这个错误:

跨线程使用 LifetimeScope 实例是不安全的。确保生命周期范围内的完整操作在同一个线程中执行,并确保 LifetimeScope 实例在创建时被释放在同一个线程上。Dispose 在 ManagedThreadId 28 的线程上调用,但在 id 为 29 的线程上创建。

我在哪里做错了?你能帮忙吗?

0 投票
2 回答
156 浏览

.net - 我可以将 SimpleInjectors 诊断的结果写入日志文件吗?

使用 SimpleInjector 我在配置结束时调用,并按照文档中的container.Verify()描述在调试器中获取诊断信息。我想将该信息写入日志文件。有没有办法以编程方式访问它或将记录器或跟踪器挂接到 SimpleInjector 中?

0 投票
2 回答
4542 浏览

c# - 无法解析从外部 dll 加载的控制器

我正在使用 MVC4 Web API 和 IoC 容器(在这种情况下为简单注入器,但我认为这个问题与该容器无关)构建一个 Web API,它应该公开各种 CRUD 和查询操作。在我的案例中使用 IOC 的原因是我们是一家开发商店,我需要能够让客户构建他们自己的 Web API 控制器来公开他们需要从我们的系统中公开需求的数据。因此,我希望设计我的解决方案,使我能够通过 IOC 将所有控制器(包括我们的和我们的客户的)都放在外部并可以加载,从而使我能够对自己的产品进行测试。

该网站没有对库的任何引用,但该库包含我想在网站中使用的控制器。这些类型在容器中注册,并且 DependencyResolver 设置为自定义依赖解析器。我有找到 dll 插件并加载控制器类型的代码,但是当我尝试导航到它所代表的路线时,它说它找不到它。

即如果我尝试导航到 /api/Test1Api 我应该看到文本“hello world”

我的问题是,虽然我已经加载了控制器类型,但我无法将其转换为网站所说的路径。

我得到错误

未找到与请求 URI 匹配的 HTTP 资源

找不到与名为“Test1Api”的控制器匹配的类型。

这是我注册容器的方式

任何帮助表示赞赏。

0 投票
2 回答
1943 浏览

c# - 使用 Simple Injector 解析多个具有相同类和接口的对象

我正在尝试在我的新项目中从 Unity 迁移到 Simple Injector。它比 Unity 快得多,我不得不试一试。我有一些颠簸,但没有什么是我无法解决的。但是我用“按键查找”击中了另一个

我读过这篇文章,简单注入器的创建者表示他相信每个接口不需要解析多个类。

我一定是个差劲的程序员,因为我已经用 Unity(它很好地支持它)做到了这一点,并且想在我当前的项目中做到这一点。

我的场景是我有一个 IRepository 接口。我有两个单独的存储库,我想使用 IRepository 接口进行抽象。像这样:

IRepository/GenericRepository 是一种相当常见的抽象,但在 SimpleInjector 中只能有一个

在 Unity 中,我可以注册我的两个存储库,然后设置我的构造函数注入来注入我需要的实例。这是使用实例的密钥完成的。(我不需要Resolve在我的正常代码中进行调用,也不需要在我的设置之外添加对 Unity 的依赖项。)

使用简单的注射器这是行不通的。但是,无论好坏,Simple Injector 的所有者都认为这个功能是个坏主意。

注意:作者的“应用内”系统看起来像是使用字符串键进行查找,但每次仍然需要不同的类(DefaultRequestHandlerOrdersRequestHandlerCustomersRequestHandler我只有一个GenericRepostory允许我抽象我的存储库方法,而不管我连接到什么。

GenericRepostory我想每次我想实例化它时我都可以继承我的。或者让它采用我不需要的随机类型参数。但这混淆了我的设计,所以我希望有另一种方法来做到这一点。

那么是否有任何解决方法不让我创建虚假类型来区分我的两个 IRepository/GenericRepository 实例?