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

enterprise-library - 企业库 5 的 SimpleInjector IContainerConfigurator 实现

是否有人知道或为 Enterprise Library 5 编写了 IContainerConfiguration 的 SimpleInjector 风格。我已经为 Castle 和 Autofac 找到了一个,并开始编写自己的,但我承认我很挣扎。

供参考:城堡autofac风味

0 投票
1 回答
159 浏览

c# - 解决 SimpleInjector 的问题

作为 SimpleInjector 的新手,这可能相对简单。

我正在注册配对如下;

根据 SimpleInjector 文档。继续说使用以下方法解决此问题;

但是,我不允许访问 note 变量的属性或方法,它只是声明由于它的保护级别而无法访问。

在 INote 中声明为

内注:INote

我需要做什么才能将 INote note 变量解析为容器中声明的具体实现?

编辑 - 更多信息

错误是在编译期间说

错误 1 ​​'NotesDAL.Interfaces.Models.INote.userID' 由于其保护级别而无法访问

Note 类是公开的

0 投票
1 回答
1405 浏览

wcf - 带有 SimpleInjector 的 Wcf 抛出“WCF 范围不能嵌套”

服务层分为命令和查询端,每一端都有自己的处理程序。

使用以下配置

以及所需的标记设置:

Factory="SimpleInjector.Integration.Wcf.SimpleInjectorServiceHostFactory, SimpleInjector.Integration.Wcf"

抛出以下异常:

WCF 范围不能嵌套。

我认为错误发生在

WcfOperationScopeManager实施。

一些背景资料:

  • WinForm 应用程序
  • QueryClient 的执行是由后台工作人员完成的
  • 我正在使用 Simple Injector 2.2.3 版
  • 构建容器的 Global.asax
  • 托管在 IIS 中
  • 每个 .svc 都有要使用的标记集SimpleInjectorFactory
  • wsHttpBinding有证书和自定义UserNamePasswordValidator
  • 每个端点配置都将所有需要的值设置为 2147483647。

当我连续快速执行两个加载请求时会发生错误,因此第一个未完成而第二个发生。

0 投票
1 回答
1016 浏览

c# - 使用 SimpleInjector 为实现泛型类型的类获取单例实例,而不是实际返回单例

我一直在遇到一些奇怪的代码问题,最后似乎注意到应该充当单例的东西实际上并不是单例。这是一个缓存类,所以我最终拥有同一个缓存的多个版本。我已经按照下面的方法编写了一些测试代码,在我看来这应该可以工作。我做错了什么,还是我偶然发现了一个错误?

0 投票
1 回答
2917 浏览

c# - Simple Injector - 构造函数注入当前 Web API 请求的 HttpRequestMessage

在我的 Web API 项目中,我有一个需要当前请求的依赖项。

代码如下:

使用 Simple Injector,是否可以在运行时将当前请求注入容器?

我尝试了以下方法:

但收到以下错误

在第一次调用 GetInstance、GetAllInstances 和 Verify 后无法更改容器。

有没有办法在运行时将当前请求注入容器?

0 投票
1 回答
1314 浏览

c# - 简单注入器 - RegisterAll 注册在构造函数中注入空集合

我有以下工厂:

我正在注册我IEnumerable<IMyService>的这样的:

然后我得到以下结果

为什么我的工厂无法解决代收服务?

0 投票
2 回答
110 浏览

c# - 为什么这个 DI 代码声明一个方法范围的变量,然后将它分配给一个静态的类级对象?

.Net 方面,直到最近,我一直被困在 2005 年。我知道我有很多事情要做,但由于我不喜欢低效的代码,SimpleInjector 教程中的以下代码片段(在这个问题的底部)让我有点难过。

问题出在BootStrapper()方法中,该方法用于初始化静态 SimpleInjector 容器。

在这个方法中, avar container被声明并分配了一个 new Container()。在方法结束时,方法范围container被分配给静态的、App 级别的container变量。

为什么这样做?必须有充分的理由首先将容器分配给本地范围的 var,然后最后将 var 分配给类级别的静态 Container 变量。对我来说,这似乎是一个明显的、多余的任务,但如果是这样的话,我怀疑有人会这样做。我错过了什么?

下面的代码来自 SimpleInjector 文档中的代码。我理解所有代码在做什么,我只是不明白这个额外var分配的意义。

来源:SimpleInjector - Windows Presentation Foundation 集成指南

0 投票
1 回答
1207 浏览

asp.net-mvc-3 - Ninject to Simple Injector:注册过滤器

由于我的 MVC 3 应用程序性能更好,我正在从 Ninject 迁移到 Simple Injector。我可以很好地注册存储库和服务。但是有一个过滤器在 Ninject 中注册使用

kernel.BindFilter<UserActivityAttribute>(FilterScope.Controller, 0).WhenControllerHas<UserActivityFilter>();

这不会转化为简单的注射器。基本上,我们使用该过滤器来记录用户活动,并且将 UserActivityFilter 指定为需要记录的控制器的属性。

0 投票
2 回答
185 浏览

c# - 将您的应用程序容器包含在服务的构造函数中是否被认为是糟糕的 DI 实践?

首先,我使用的是 Simple Injector,但我认为这个问题可以适用于任何 DI 框架。

在创建要为应用程序注册的服务时,通过其构造函数将服务容器传递给服务是否被认为是不好的做法?

例如。考虑以下代码。

从上面的方法可以看出,我定义了一个服务类,它接受一个 Simple Injector 容器。当我注册容器时,我将与我的应用程序关联的容器传递给服务。

当您定义将在单独项目中的服务时,这似乎是一种有用的方法,甚至可能在不同的命名空间中,需要在应用程序生命周期的某个时间点注册新服务。但是,我在任何示例中都没有看到这样做,在我尝试这样的事情之前,我想确保这种方法是正确的。

这种行为是否被认为是良好的 DI 实践?如果没有,您如何获取应用程序的 DI 容器,并根据需要从服务中注册新服务?

更新——更多细节

我决定开始在一个新项目中使用依赖注入,原因有两个。第一,这是一个庞大的项目,可能包括 10-12 个 Visual Studio 项目,第二,其中许多项目包含我多年来从一个应用程序复制并粘贴到另一个应用程序的代码,然后稍作修改。被需要。够了,是时候编写我自己的业务逻辑框架了,它适用于我们公司,因为我们需要它。

这个第一个大项目似乎是从 DI 和我的自制框架开始的地方。为了一次构建和测试这个应用程序的一层,我定义了很多接口和“shell”服务类。这样,我可以连接我的顶级应用程序,并在他们的项目完成并链接到我的解决方案时更新依赖项。

由于这是一个如此大的应用程序,我有服务,这将需要依赖于服务......这将进一步依赖于服务。

我的想法是我的应用程序应该只注册它需要验证我的用户和加载视图的服务。视图服务应该注册模型视图。ModelView 服务应该注册它们关联的模型服务,这将注册数据库连接服务......叹气,它最终将注册一个服务器端同步服务,它将注册一个本地数据库连接服务和 Web 应用程序服务。呸!听起来很混乱?嗯,有点像。

我的想法是我可以定义这些可以接受 Container 对象的类,然后每个服务将使用该容器来获取可能已经存在的任何底层服务,或者如果尚未创建一个则实例化一个新服务。

例如,我的用户身份验证服务可能会通过ILocalDB应与我的模型服务共享的服务缓存信息。如果我在启动我的应用程序时注册所有这些服务,该应用程序将变得迟缓,并且整个注册过程看起来很粗糙。

我认为必须有一个优雅的解决方案。我错过了什么?

0 投票
1 回答
1033 浏览

c# - 对 SimpleInjector 的 Container.GetInstance() 方法的性能影响

我知道 SimpleInjector 的性能和速度非常好,但无论如何我需要弄清楚调用 Container.GetInstance() 方法的开销有多大。

例如,如果我有以下课程:

如果 Cache 属性被大量使用或者我应该删除它并让消费者直接使用 Container 显式获取 ICacheClient 的实例,会对性能产生什么影响?