问题标签 [dryioc]

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 投票
1 回答
725 浏览

asp.net-web-api - 在运行时使用 DryIoc 和 Asp.Net Web Api 应用程序创建 DbContext

我想做类似Autofac下面这一行的事情DryIoC

我有一个CoreDBContext连接字符串为TenantDBContext. 在注册我的上下文时传递连接字符串是否有效DryIoc

0 投票
1 回答
312 浏览

c# - 无法选择具有从另一个已注册实例属性解析的参数的构造函数

以下示例将应用程序配置实例的属性注册到容器中,下一次注册将使用该属性作为控制台编写器的构造函数。

但是,我们宁愿不在容器中注册属性,而是使用某种表达式直接选择注册的应用程序配置实例的属性。我们想要看起来像这样的东西:

但这不起作用,抛出以下异常(这是我们预期的):

有什么办法可以做到这一点?这是我们拥有的示例类。我们只想注册这两个类

0 投票
1 回答
2057 浏览

c# - DryIoC 不会将属性注入 ASP.NET Core MVC 控制器

我使用https://bitbucket.org/dadhi/dryioc/src/589e7c0b356a/NetCore/src/DryIoc.AspNetCore.Sample作为基线。尝试使用以下内容实现基于属性的属性注入选择器:

whereDependencyAttribute标记要注入的属性。如果不将此解决方案嵌入到 ASP.NET MVC Core 应用程序中,它就可以正常工作。当我尝试[Dependency]使用 ASP.NET Core 应用程序在具有属性的控制器中注入属性时.WithDependencyInjectionAdapter(...),它不起作用,它只注入(并拦截)那些类,这些类是接管服务后ConfigureServices(以及.AddDryIoc<TCompositionRoot>之后注册的) )。

我使用的代码部分:

DI类:

附加信息:

  1. 构造函数注入在控制器中工作。
  2. 彻底搜索了 DryIOC 容器配置以进行属性注入,但它是关于 WebApi 应用程序的,而不是我尝试的情况。
  3. 我试图切换顺序,.WithDependencyInjectionAdapter(...).With(rules => ...)没有运气。
  4. 拦截也不适用于控制器。我正在使用@dadhi 的拦截建议:https ://bitbucket.org/dadhi/dryioc/wiki/Interception 。顺便说一句,您如何使用 Castle 和 DryIoC 为控制器注册拦截器?
  5. 我不会CompositionRoot在这里复制课程;它很无聊,很长而且不相关。

获得控制器属性注入和控制器方法拦截工作的任何想法?

0 投票
2 回答
942 浏览

performance - Xamarin 表单、棱镜表单和 IoC

我有一个最初使用 Prism 和 Unity 开发的 Xamarin Forms 应用程序。我发现 Unity 在第一次解析对象时相当慢,尽管一旦第一次通过了相同对象类型的所有后续解析,速度就会明显更快。

基于我在另一个线程上收到的一些不相关的建议,我决定尝试从 Unity 切换到 DryIoc。不幸的是,我发现在解析对象时这会更慢,但在随后解析那些相同对象类型的新实例时速度没有提高。

所以,我的问题是,我可以用这两个容器做些什么来提高性能?例如...

  • Unity 中是否有任何东西可以让我预先配置可能创建的对象,以便第一个分辨率与后续分辨率一样快?
  • 我可以用 DryIoc 做些什么来加快所有对象的分辨率?

作为参考,我自己对每个的用法都很简单;我正在使用我RegisterInstance的大部分对象(设置、数据库等)并通过构造函数将它们注入到我的 ViewModel 对象中。Forms 和 ViewModel 对象本身都是使用 PrismRegisterTypeForNavigation扩展方法注册的

0 投票
0 回答
88 浏览

c# - MS.Ext.DI 在编译时获取基于 lmlementationType 的描述符的任何可能性

如果可能,我想为 Microsoft.Extensions.DependencyInjection 创建一个适配器,以将基于类型的注册移动到编译时。例如,在 Asp .Net Core 中,这意味着我需要在 compile-timeImplementationType以某种方式获取基于描述符的服务集合。

我不关心 的运行时描述符ImplementationFactory/Instance,它可能由容器的运行时部分处理。但是类型在编译时是已知的,例如程序集就位并且不会改变。那么为什么不在编译时为类型构建/解析对象图以加快引导时间并了解类型的组成方式。

顺便说一句,实现这一点的 IoC 并不重要,但我将使用DryIocZero / DryIoc

0 投票
0 回答
441 浏览

scope - 如何围绕 DryIoC container.OpenScope() 创建一个包装器?

我在 DryIoC 容器周围创建了一个包装器,它只是一个将任务委托给 DryIoC 方法的类(例如,myContainer.Register<T>()将调用dryIoC.Register<T>())。目标只是将真正的实现隐藏在我的界面后面,以便我可以根据需要切换到另一个 DI 容器。

一切正常,但是我今天在从此处获取的示例代码中尝试使用Scopes like 时遇到了问题

我天真的包装器实现是创建另一个接受 DryIoC 容器实例的构造函数,并这样做:

我的理解是dryIoC.OpenScope()返回容器的一个新实例,所以我所要做的就是在内部保存这个实例并用它来解析我的类。但是那个实现对我不起作用,这里是我的单元测试:

但是这个测试没有 cls1.Dep.ShouldBeSameAs(dep);告诉我这两个实例IMyInterface是不同的!!!我错过了什么吗?

0 投票
0 回答
471 浏览

c# - 如何让 PRISM 将瞬态依赖项注入视图?

我们正在制作一个使用 PRISM 库和 DryIoc 进行 DI 的 Xamarin 应用程序。我们有一些服务在 .NET Core 依赖注入简单的 IServiceCollection 中注册为 Transient 或 Scoped,我们将其改编为 DryIoc。

我们遇到的问题是(即使我们将一个类型注册为 Transient),当容器在构造函数中向新 View 注入依赖时,它每次都注入同一个实例。

在我们重写的 .NET Core 实现中PrismApplication.CreateContainer,我们只调用base.CreateContainer.NET Core 集合并添加WithDependencyInjectionAdapter方法。

DbContext目标是在每个视图创建中创建一个新的依赖实例(例如一个新的)。我们怎样才能做到这一点?

0 投票
1 回答
254 浏览

c# - 从另一个注册对象的另一个属性中注入具有值的属性?

我不太确定 DryIoc 是否值得我花时间。它看起来像轻量级并且在跨平台环境(使用 Xamarin)中得到很好的支持。但我觉得使用它有点困难(就我自己探索一切而言)。

DryIoc 社区也不是很大(通过阅读有关 DryIoc 的一些答案,我意识到看起来只有作者加入并给出答案)。这是标题中提到的我的问题。假设我有 2 个 ViewModel 类,第二个有一个属性应该始终与第一个的属性匹配(映射),如下所示:

现在我可以使用 dryioc 为两个 ViewModels 注册单例,但对于第二个,我还需要注入属性 A 以及第一个属性 A 的值。

所以你可以看到第一次注册应该没问题,因为不需要属性依赖。然而,第二个应该有它的A属性取决于A第一个。

真的,我自己无法探索这个。注入一些注册类型的属性很好(至少我知道怎么做),但是这里注入的值是一些注册类型的另一个属性

0 投票
1 回答
238 浏览

dryioc - 如何注册 IEnumerable在 DryIoc Mvc 控制器中,如 Autofac 枚举(IEnumerable 、IList 、ICollection

0 投票
1 回答
221 浏览

c# - 如何将依赖项从测试项目传递到 DryIoc 中的具体实现

很抱歉,我没有太多代码可以分享,因为我不确定这将如何工作。

我有一个名为 API.Tests 的测试项目,我正在为 API 项目中的 NewsController 编写测试。我不确定如何将依赖项从 Tests 传递到 API,因为它是单向引用。

新闻控制器