dependency-injection 相关问题

一种设计模式,通过动态地向软件组件中注入需要运行的依赖项来减少组件之间的耦合。

使用 NInject,在注入 ctor arg 时解析 IEnumerable<T> 失败,但在执行 Get<IEnumerable<T>>()

使用 NInject 时,如果我为 IEnumerable 设置了绑定,如果我直接请求 IEnumerable,它将起作用,但如果另一个绑定对象需要 IEnumerable,则不起作用。难道是……

回答 1 投票 0

.NET 依赖注入 - 在非 IOptions 对象上启动时验证

我正在尝试在应用程序启动时加载 json 文件和 json 架构文件,并使用加载的架构验证 json。 我只看到 AddOptions<> 可以在星号上运行验证...

回答 1 投票 0

依赖注入 - 数据传递到依赖项

我正在尝试学习和理解依赖注入。 (下面是Python示例): 打印机类: def 打印(自身): 经过 类 CSVPrinter(打印机): def 打印(自身,数据): 为...

回答 1 投票 0

AuthorizationHandler 获取注入服务的新实例

我有一个带有自定义 AuthorizationHandler 和 IAuthorizationRequirement 的 Blazor 应用程序。 AuthorizationHandler 的片段: 内部类 PermissionLevelAuthorizationHandler : AuthorizationHand...

回答 1 投票 0

是否可以在 azure 函数中使用 AddSecretClient DI 扩展?

我正在尝试为我的天蓝色功能配置一些依赖项。我需要能够访问(除其他外)一个天蓝色的密钥库。目前我正在手动访问它并且必须自己完成所有工作

回答 2 投票 0

使用 Dagger 2 进行 Jetpack Compose 和 DI

最近我在做一个小项目,想到了一件事关于compose和dagger。 通常我使用带有注入功能的 Dagger,这对我来说是一切,但现在看来它不是......

回答 1 投票 0

Google Guice 非目标绑定

我的问题更多的是要求一个简单的无目标(参考 google guice wiki 的拼写)绑定的工作示例。到目前为止,我已经查遍了互联网并且已经

回答 1 投票 0

Springboot不创建mapstruct bean

我有一些带有以下代码的映射器: 导入 org.mapstruct.Mapper; 导入 org.mapstruct.MappingConstants; @Mapper(componentModel = MappingConstants.ComponentModel.SPRING) 公共接口

回答 1 投票 0

如何在 C# 中为带有构造函数参数的类合并依赖注入?

给出以下代码: 公共接口ISomeClient; 公共类 SomeClient : ISomeClient { SomeClient(字符串 clientID, 字符串 clientSecret) { _clientID = 客户端ID; _客户端秘密 =

回答 1 投票 0

当依赖注入在 blazor 中大行其道时

我有一个 blazor 项目,它有一个单独的 Web 应用程序 UI 和一个利用 blazor 混合原理的移动应用程序 UI,它们共享多个组件,这些组件显示一些数据并允许在

回答 1 投票 0

.NET Core 继承接口的依赖注入

我有 I1、I2 和 Foo 类,其中 I2 继承 I1 (I2:I1),并且 I2 在 Foo 中实现。我想注册一个作用域依赖项,以便当任何接口为

回答 1 投票 0

Angular 18 同一服务的多个实例

我已经: 服务DataLoader,在数据库中读取/写入数据。 服务 报告谁使用注入实例 DataLoader 也注入 DataLoader 和 Report 的独立组件。 此时,只有一个

回答 1 投票 0

添加范围 DI 和线程安全

在与同事交谈后,我试图准确了解 AddScoped 发生了什么。 我一直认为 AddScoped 在服务中创建管理器类的新实例...

回答 1 投票 0

当你只能使用默认参数时,在 FastAPI 中使用依赖注入有什么意义?

我不明白使用FastAPI时依赖注入的意义,比如看看这段代码 实用程序/getInfo.py def getInfo(): 从应用程序导入用户模型 从应用程序导入 PostModel ...

回答 1 投票 0

为什么 .NET 的 DI 系统不理解通用接口差异?

考虑这个例子: var builder = WebApplication.CreateBuilder(args); builder.Services.AddTransient, SpecificEventHook>(); builder.Services.AddTransient 考虑这个例子: var builder = WebApplication.CreateBuilder(args); builder.Services.AddTransient<IHook<SpecificEvent>, SpecificEventHook>(); builder.Services.AddTransient<IHook<IEvent>, GeneralEventHook>(); var app = builder.Build(); var hooks = app.Services.GetServices<IHook<SpecificEvent>>(); Console.WriteLine(hooks.Length); // 1 (bummer...) public interface IEvent; public interface IHook<in TEvent> where TEvent : IEvent { void On(TEvent @event); } public record SpecificEvent(int Foo) : IEvent; public class SpecificEventHook : IHook<SpecificEvent> { public void On(SpecificEvent @event) { } } public class GeneralEventHook : IHook<IEvent> { public void On(IEvent @event) { } } 当我尝试解析来自服务提供商的 IHook<SpecificEvent> 列表时,我期望得到 GeneralEventHook (这是一个 IHook<IEvent>),因为 IHook 的通用参数是逆变的 ( in TEvent)。 但标准的.NET依赖注入系统似乎不支持这一点。令人惊讶的是,网络上关于此类场景的信息非常少。 我很好奇为什么?没有办法定制DI容器来实现这一点吗?如果没有,针对此类要求的合理解决方法是什么? .NET 依赖注入系统不与通用接口差异集成,因为它是为了简单性和性能而设计的,使用精确的类型匹配而不是考虑差异关系。 要解决此问题,您有几种选择: 创建结合了特定钩子和通用钩子的自定义解析方法。 使用适配器模式将通用钩子包装为特定钩子,或者您可以 实现一个事件聚合器来管理所有挂钩和分派事件。 例如 public static IEnumerable<IHook<TEvent>> GetAllHooks<TEvent>(this IServiceProvider services) where TEvent : IEvent { var specificHooks = services.GetServices<IHook<TEvent>>(); var generalHooks = services.GetServices<IHook<IEvent>>(); return specificHooks.Concat(generalHooks); } // Usage: var hooks = app.Services.GetAllHooks<SpecificEvent>(); 此方法保留了现有的 DI 设置,同时允许您在需要时检索特定和通用挂钩。

回答 1 投票 0

为什么 .NET DI 不与通用接口差异集成?

考虑这个例子: var builder = WebApplication.CreateBuilder(args); builder.Services.AddTransient, SpecificEventHook>(); builder.Services.AddTransient 考虑这个例子: var builder = WebApplication.CreateBuilder(args); builder.Services.AddTransient<IHook<SpecificEvent>, SpecificEventHook>(); builder.Services.AddTransient<IHook<IEvent>, GeneralEventHook>(); var app = builder.Build(); var hooks = app.Services.GetServices<IHook<SpecificEvent>>(); Console.WriteLine(hooks.Length); // 1 (bummer...) public interface IEvent; public interface IHook<in TEvent> where TEvent : IEvent { void On(TEvent @event); } public record SpecificEvent(int Foo) : IEvent; public class SpecificEventHook : IHook<SpecificEvent> { public void On(SpecificEvent @event) { } } public class GeneralEventHook : IHook<IEvent> { public void On(IEvent @event) { } } 当我尝试解析来自服务提供商的 IHook<SpecificEvent> 列表时,我期望得到 GeneralEventHook (这是一个 IHook<IEvent>),因为 IHook 的通用参数是逆变的 ( in TEvent)。 但标准的.NET依赖注入系统似乎不支持这一点。令人惊讶的是,网络上关于此类场景的信息非常少。 我很好奇为什么?没有办法定制DI容器来实现这一点吗?如果没有,针对此类要求的合理解决方法是什么? .NET 依赖注入系统不与通用接口差异集成,因为它是为了简单性和性能而设计的,使用精确的类型匹配而不是考虑差异关系。 要解决此问题,您有几种选择: 创建结合了特定钩子和通用钩子的自定义解析方法。 使用适配器模式将通用钩子包装为特定钩子,或者您可以 实现一个事件聚合器来管理所有挂钩和分派事件。 例如 public static IEnumerable<IHook<TEvent>> GetAllHooks<TEvent>(this IServiceProvider services) where TEvent : IEvent { var specificHooks = services.GetServices<IHook<TEvent>>(); var generalHooks = services.GetServices<IHook<IEvent>>(); return specificHooks.Concat(generalHooks); } // Usage: var hooks = app.Services.GetAllHooks<SpecificEvent>(); 此方法保留了现有的 DI 设置,同时允许您在需要时检索特定和通用挂钩。

回答 1 投票 0

如何注册具有不同依赖关系的同一接口的多个实现

假设我有一个接口的多个实现。每个实现都有其自己的依赖关系。我们怎样才能得到正确的呢?必须在运行时选择正确的实现。杜...

回答 1 投票 0

Spring Boot中如何处理ArrayLists(Java)?即自动装配/依赖注入[关闭]

我正在进行在线编码评估,其中我应该“重构/修复”一些 Spring Boot API,它有一个 Cart.java、Catalog.java 和 Product.java 模型类,以及 if-I-recall -

回答 1 投票 0

Spring Boot 中如何处理数组列表(Java)?即自动装配/依赖注入

我正在进行在线编码评估,其中我应该“重构/修复”一些 Spring Boot API,它有一个 Cart.java、Catalog.java 和 Product.java 模型类,以及 if-I-recall -

回答 1 投票 0

Angular:使用独立方法从库注册提供程序

我已经使用应用程序和库引导了 Angular v18 工作区。我在图书馆中创建了一项服务,并想在应用程序中使用它。一切都按照标准组织...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.