dependency-injection 相关问题

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

一个类直接调用另一个Error类是不是错误?

我对 SOLID 原则还不熟悉。我有这样的场景: 类错误类{ 构造函数(名称:字符串,描述:字符串){ // } } 类1类{ 公共一些方法(){ t...

回答 1 投票 0


Spring boot:无法打破bean之间的依赖循环

我正在使用 Spring Boot 创建一个航空公司网站。我有一个 Seat 类和一个 Flight 类,它们代表数据库中的表。这个想法是,每当添加航班时,座位......

回答 1 投票 0

如何将服务注入到 ASP.NET Core 7 中的工厂函数(ModelBuilderFactory)中

在我们的应用程序设置中配置工厂功能时,我很难访问服务。 我们正在使用 Asp.Versioning,我正在尝试注入一个服务以在我们的自定义模型生成器中使用。 这里是...

回答 1 投票 0

如何访问springs中的另一个字段@Value

就像标题所示,我想使用 springs @Value 注释访问另一个字段值。 我想这样做是为了通过另一个字段 id 解析字段值。例如:我有一个字段 id 和一个字段

回答 1 投票 0

有没有办法在 SignalR Hub 的构造函数中实现依赖注入?

大家好,在我的 ASP.NET MVC 应用程序上的 SignalR Hub 中,我尝试将“NotificationService”类注入到我的 SignalR Hub 的构造函数中。 公共类 ManualReconHub :集线器...

回答 1 投票 0

Flutter GetIt 抛出实例异常

我正在尝试使用 get_it 在我的 flutter 应用程序中注册我的服务,并且需要在开始时通过异步调用初始化一个依赖项。 正如我在官方 Get_I 上读到的...

回答 2 投票 0

我的Spring Boot Java项目应该选择哪种文件读取方式?

我正在开发一个 Spring Boot Java 项目。 我将首先解释我如何处理类似问题的情况,其次解释问题本身。 我的问题的类似情况我正确地汉...

回答 1 投票 0

C# 如何初始化通过构造函数注入的服务

当我使用依赖注入时,我试图理解我将如何: 通过调用特定的构造函数来实例化注入? 如果我需要用 2 初始化这两个单独的实例怎么办?

回答 1 投票 0

直接从 Hilt 获取实例

我通过 Hilt 在 FirstFragment 中注入 MyObject,这个片段替换为另一个片段,正如你所知,当一个片段被另一个片段替换时, onDestroyView() 会被调用,当你...

回答 2 投票 0

如何使用工厂在nestjs依赖注入系统中提供类?

我想创建抽象服务/类的多个实现。并根据某些“设置”使用特定的一个。我在官方文档中找到了这个例子。 现在我想要...

回答 1 投票 0

是否有更简洁的方法来在.NET ServiceCollection中注册深度嵌套的特殊依赖项?

在 ASP.NET Web 服务中,我有普通的依赖项,例如 services.AddScoped(); services.AddTransient 在 ASP.NET Web 服务中,我有普通的依赖项,例如 services.AddScoped<IEmailService, EmailService>(); services.AddTransient<ICustomerCreationService, CustomerCreationService>(); services.AddTransient<ICustomerValidationService, CustomerValidationService>(); services.AddTransient<ICustomerService, CustomerService>(); services.AddTransient<IBackgroundService, BackgroundService>(); ... 但是我们只有一些特殊的情况,只有在特定的情况下我们才需要上述情况的例外,所以我必须执行以下操作。在这个例子中,我想每次在BackgroundService的上下文中需要一个新的IEmailService时使用一个新的实例,而不是使用上面注册的“默认”Scoped实例,所以我需要执行以下操作: services.AddTransient<BackgroundService>(sp => ActivatorUtilities.CreateInstance<ICustomerService>(sp, ActivatorUtilities.CreateInstance<ICustomerValidationService>(sp, ActivatorUtilities.CreateInstance<ICustomerCreationService>(sp, // this is the only override we actually need (don't use scoped IEmailService) ActivatorUtilities.CreateInstance<EmailService>(sp) ) ) ) ); 现在这里 ICustomerService 不需要自己激活;我只是希望它使用上面注册的普通依赖注入。 ICustomerCreationService 和 ICustomerValidationService 也是如此。但我认为我必须使用 ActivatorUtilities 为特殊依赖项的整个树指定参数,对吧?有更优雅的方式吗?我很想在上面说这样的话,但我看不出有什么办法。我错过了吗? services.AddTransient<IBackgroundService>(sp => ActivatorUtilities.CreateInstanceAtAnyLevel<EmailService>(sp) // I wish... ); 我不确定,但这也许可以帮助你。 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-8.0&tabs=visual-studio public sealed class BackgroundService: IHostedService, IDisposable { public BackgroundService(IServiceScopeFactory serviceScopeFactory) { serviceScope = serviceScopeFactory.CreateScope(); } public Task StartAsync(CancellationToken cancellationToken) { var services = serviceScope.ServiceProvider; var emailService = services.GetRequiredService<IEmailService>(); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { return Task.CompletedTask; } public void Dispose() { serviceScope.Dispose(); } }

回答 1 投票 0

AddKeyedScoped 使用 func<IServiceProvider, object?, TService>implementationFactory 初始化对象不起作用? .NET 8

我已开始在 .NET 8 中使用 AddKeyedScoped。 我想使用我自己的初始化对象来进行依赖: 公共静态 IServiceCollection AddKeyedScoped( 这个 IServiceCollection

回答 1 投票 0

.net core注册通用接口并使用getservice检索它们

我有接口 IOrder 和 FurnitureOrder 实现它 我需要注册多个这样的实现 services.AddSingleton(IOrder, FurnitureOrder 我有接口 IOrder<T> 并且 FurnitureOrder<T> 实现了它 我需要注册多个这样的实现 services.AddSingleton(IOrder<Chair>, FurnitureOrder<Chair>()) services.AddSingleton(IOrder<Table>, FurnitureOrder<Table>()) 现在我需要检索所有IOrder服务和类型(例如椅子、桌子)以对其进行一些背景工作。 我可以使用 GetServices API 获取它吗? 如果不可能,请建议是否需要更改设计 一种方法是引入一些常见的非通用接口IOrder并将所有服务注册为它(类似的框架用于托管服务注册和执行): interface IOrder { } interface IOrder<T> : IOrder { } services.TryAddEnumerable(ServiceDescriptor.Singleton<IOrder, FurnitureOrder<Chair>>()); services.TryAddEnumerable(ServiceDescriptor.Singleton<IOrder, FurnitureOrder<Table>>()); 然后您可以将它们作为 IEnumerable<IOrder> 注入到您的依赖类中,或者使用 IServiceProvider.GetServices<IOrder>() 调用来解析它们。 另请注意,下次注册也应该有效: services.AddSingleton<IOrder, FurnitureOrder<Chair>>() services.AddSingleton<IOrder, FurnitureOrder<Table>>() 如果您需要通用注册,您也可以使用类似的方法自动执行非通用注册(在注册所有通用注册之后): var serviceDescriptors = services .Where(descriptor => descriptor.ServiceType.IsConstructedGenericType) .Where(descriptor => descriptor.ServiceType.GetGenericTypeDefinition() == typeof(IOrder<>)); foreach (var sd in serviceDescriptors) { services.TryAddEnumerable(ServiceDescriptor.Transient(typeof(IOrder), p => p.GetService(sd.ServiceType))); // or add desciptor creating new based on existing one } 假设您是指在执行ConfigureServices期间? 你可以这样做: services.AddSingleton(typeof(IOrder<Chair>), f => new ChairOrder()); var listOf = new List<ServiceDescriptor>(); using var enumerator = services.GetEnumerator(); while (enumerator.MoveNext()) { var interfaceType = enumerator.Current.ServiceType; if (!interfaceType.IsGenericType) continue; if (interfaceType.Name.StartsWith("iorder", System.StringComparison.OrdinalIgnoreCase)) listOf.Add(enumerator.Current); } var sp = services.BuildServiceProvider(); foreach(var serviceDescriptor in listOf) { var interfaceIWant = serviceDescriptor.ServiceType; var objectToUse = sp.GetRequiredService(serviceDescriptor.ServiceType); //TODO: } 在尝试学习如何装饰/动态代理通用接口的任何注册实现时发现了这个问题。我找到了一个解决方案,将 @t-nielsen 的通用检查和 @guru-stron 的答案结合到 IServiceCollection 的简单扩展方法中(部分也受到 Rey 关于检索通用实现的问答的启发 here )。 扩展方法: public static IEnumerable<Type?> GetGenericInterfaceImplementationTypes( this IServiceCollection services, Type genericInterfaceType) { return services .Where(descriptor => Array.Exists(descriptor.ServiceType.GetInterfaces(), i => i.IsGenericType && (i.GetGenericTypeDefinition() == genericInterfaceType))) .Select(d => d.ImplementationType); } 使用示例: public static IEnumerable<Type?> GetOrderImplementationTypes(this IServiceCollection services) { return services.GetGenericInterfaceImplementationTypes(typeof(IOrder<>)); }

回答 3 投票 0

小足迹依赖注入java

我正在寻找一个非常轻量级的java依赖注入框架。 具有尽可能少的依赖性和最少的功能。 只是遵循以下几行:接收 java.util....

回答 7 投票 0

将范围服务的实例传递到单例

我有一个作用域服务 ScopedA,我通过 DI 将其注入另一个作用域服务 ScopedB。 我还注入了第三个单例服务 Singleton1: 公开课范围dB { 范围A _范围A; 单身...

回答 1 投票 0

如何通过HostBuilder从Configuration对象中获取值?

在 .NET 6 中启动了一个新的控制台应用程序并添加依赖项注入。在下面的代码中,如何访问 IConfiguration 对象以从 appsettings 读取值(在调用 Build 之后? ...

回答 1 投票 0

依赖注入上下文中的组合根是什么?

我正在探索依赖注入,术语组合根到处都在使用。那么它是什么?

回答 2 投票 0

Websocket 适配器中的 NestJS 依赖注入

我正在尝试在 NestJS 应用程序中建立 Websocket 连接时验证和检查用户的权限。 我发现这个讨论建议使用 NestJS Websoc...

回答 2 投票 0

在 ASP.NET Core 中注册 HostedService 的正确方法。 AddHostedService 与 AddSingleton

在 ASP.NET Core 2.1 中注册自定义托管服务的正确方法是什么?例如,我有一个从 BackgroundService 派生的自定义托管服务,名为 MyHostedService。我该如何注册...

回答 4 投票 0

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