问题标签 [light-inject]
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.
asp.net - 从 Ninject 迁移到 LightInject 时,Web 应用程序性能没有显着提高
我们有一个生产 Web 应用程序 (ASP.NET MVC)。该应用程序是 2 年前开发的,并使用 Ninject 作为 DI 容器。
查看性能结果,我们有动力将 Ninject 替换为 LightInject。我们之前已经在其他小型 Web 应用程序中做到了这一点,因此确信不会有任何技术障碍。
在单独的代码分支中,我们进行了更改并成功地将 Ninject 替换为 LightInject。Web 应用程序使用 LightInject 作为 DI 容器正常运行。
现在到了有趣的部分,我们得到了什么?
所以我想进行快速(非科学)性能分析。所以我在我的开发盒上使用了Prefix(这是一个很棒的工具),并手动捕获了运行这两个版本的 Web 应用程序的时间。忽略第一次运行和平均时间,每页运行 10 次。
结果并不那么令人鼓舞,让我想知道为什么?
我认为这些结果可能有以下可能性:
- 测量的 UI 页面数量较少。
- 使用的绩效衡量技术是手动的,不科学的。
- 我们在 Web 应用程序中使用 DI Container 的方式,使用 Ninject 或 LightInject 并不重要。如果是这种情况,我们不想替换它(因为替换会影响完整应用)。为了确立这一点,我们需要更多的科学成果。
我想在服务器上使用前缀,但我们托管在 AWS Elastic Beanstalk 中。
我只需要一些性能矩阵来确定在我们的案例中是否值得切换到 LightInject。
对此有何建议?
c# - 带参数的 LightInject 类型工厂
根据 LightInject 的文档,我们可以创建一个类型化工厂并将值传递给它,如下所示:
我们像这样注册它:
我们可以这样调用 GetFoo:
所以现在我的问题是:我们在注册工厂 new Foo(value) 时显式地实例化 foo。但是如果我们想在我们的 GetFoo 方法中根据值来做呢?
我希望能够调用 GetFoo 并根据“值”获得正确的实现。
light-inject - 使用 lightinject 服务始终为空
我正在尝试在每个请求都可用的基本控制器上注册一些服务。
然后我有这些的一些具体实现
然后我有基本控制器,我也想注册这个服务;
所以在我的应用程序启动中我有这个初始化;
但是当我检查它InstagramApiService
时BaseController
它总是null
。设置它的正确方法是什么,以便我始终可以InstagramApiService
在我的控制器中使用?
c# - LightInject 不解析继承的泛型类型
我正在尝试使用 LightInject 和 MediatR 来构建通用请求处理程序。基本上,我有以下类型:
我已经将我的Handler
类型注册到我的 LightInject 容器中,如下所示:
但是,当我尝试调用我的调解器以实现 时IAsyncRequestHandler<InheritedType,SomeResponseType>
,它失败了。我本来希望得到我的注册Handler
,因为InheritedType
implements SomeType
。
我在这里做错了什么,或者 LightInject 有什么方法可以实现我上面描述的行为?
如果不清楚,请告诉我,我可以尝试提供更多信息。谢谢!
c# - 将 LightInject 与 MVC5 和 .Net 4.5 一起使用时找不到方法
在为 MVC 控制器设置 LightInject 时,在调用container.EnableMvc();
注入器设置时出现错误。
错误:
找不到方法:'Void LightInject.WebContainerExtensions.EnablePerWebRequestScope(LightInject.IServiceContainer)'
资源:
附加信息:
- 我正在通过 Visual Studio 在本地运行代码
- 该项目是4.5
- 我的操作系统是 Windows 10(框架 4.5)
过去,当我设置 LightInject 时,我手动设置了作用域生命周期,但用于一般设置和 MVC 特定示例的文档已经更改。我遇到了一个线程,提到这可能是不将 LightInject.Web 包括为 dep 的问题,但我可以看到它列为 LightInject.MVC 的 dep 并在项目的引用列表中。
在启用 MVC 之前,我是否可以采取任何其他步骤来手动配置生命周期或以其他方式验证此方法是否可用?
c# - 使用 lightinject 通过 xml 文件或 web.config 解决依赖关系
使用 lightinject 时,有没有办法使用外部配置文件中的字符串值来告诉容器注册文件中提到的服务?这将在 xml 文件或 web.config 文件中。
例如,在我的 web.config 中的前一个项目中,我将有以下行
我可以通过 WebConfigurationManager 调用获得值。此示例将具体类 PersonRepository.Db.DbRepository 名称作为字符串获取,然后可用于解析依赖关系。这是我过去使用过的一种方法,但无法弄清楚如何使用 lightinject 做同样的事情。这可能吗?
抱歉,如果这有点混乱,这是我第一次正确尝试依赖注入。
非常感谢。
再一次问好。我已经尝试了几天来实现您描述的方法,但没有成功。简明扼要地证明这一点;
我从编译器得到错误'stringType'是一个变量,但它像一个类型一样使用。
在此处进一步阅读;
如何使用 typeof 或 GetType() 作为 Generic 的模板?
似乎这是对语言的限制。请问有什么想法吗?非常感谢。
asp.net-mvc-5 - ASP.NET MVC 5 和 LightInject
我正在尝试在我当前的项目中使用 LightInject,但我一直得到一个空值。我在 MVC 5 中有一个 Web 应用程序,并附有一个业务层。我已经在我的 Web 项目中安装了LightInject.Mvc和LightInject.Web 。我已经在我的业务项目中安装了LightInject.Mvc 。
在业务层,我有一个 compositionRoot.cs 文件:
接下来,在 web 项目中,在 Global.asax.cs 中,我在 app_start 方法中有以下内容:
最后,我的控制器代码如下所示:
当代码尝试使用RegisterUserCommand时,我基本上在控制器中得到了 null 异常。我假设 LightInject 在遇到接口时会自动注入代码。我错过了什么?
asp.net-core - ASP.Net Core Dispose vs Per Request Lifetime
因此,我正在开发一个简单的项目,该项目利用了 api 层、服务层(想想业务逻辑)以及围绕它的所有适当的支持层。过去,我相信当控制器超出范围时,Web Api 2 请求将启动处置层次结构(因此,从 api 调用并且是类的数据成员的任何服务都与它们后续的存储库/依赖项一起被处置) .
在核心中,如果我执行调用 base.dispose() 的简单方法覆盖,我可以看到从控制器调用 dispose 的位置。但是,我的服务似乎开始了它的处置过程,我被困在使用 LightInject 的 PerRequestLifetime 范围来摆脱可处置的资源。这只是与核心不同吗?通常瞬变给了我我所期望的行为(在调用 controller.dispose() 时对依赖项进行 dispose 调用)。完全公开我之前所做的工作使用了 Unity IoC 容器。
我相信最终结果与重写控制器 dispose 方法以调用 service.dispose() 相同,但我只是对核心上下文中 LightInject 瞬态的行为感到惊讶。
这是我的存储库,带有示例代码https://github.com/napalm684/ReciPiBookCore。
当然,这里主要关注的是 UnitOfMeasureController 和 UnitOfMeasureService。DI 层(特别是https://github.com/napalm684/ReciPiBookCore/blob/master/src/ReciPiBook.Di/ServiceContainerExtensions.cs)是您可以找到该服务的 LightInject 注册工作的地方。
登记
控制器
服务
dependency-injection - LightInject 多个构造函数
使用 LightInject 已经有一段时间了,感觉很棒!但是,在尝试支持相同类型的多个构造函数时遇到了麻烦。请参阅下面的简化示例。Foo 有四个构造函数,不同的是参数的类型和数量。我为每个构造函数注册一个映射。我第一次调用 GetInstance 来检索 IFoo 时,它因以下异常而崩溃。我错过了什么?我怎样才能完成这个功能?
InvalidCastException:无法将“LightInject.ServiceContainer”类型的对象转换为“System.Object[]”类型。