问题标签 [servicecollection]

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 回答
114 浏览

.net - 构建 ServiceCollection 后如何替换注册(在运行时)?

3年后仍然不支持吗?看这个问题:.NET Core IServiceCollection Replace not refresh

我试图在 XamarinForms 中实现的是在用户选择之后,基于接口的注册类型(数据服务)的运行时替换。

我确实找到了Replace()扩展功能,但我没有找到适合它的方法。

主要原因是 after HostBuilder.ConfigureServices(),HostBuilder.Build()似乎是必需的,但可能只被调用一次。那么如何更改注册呢?

或者这仍然不是故意的?那么,那有什么用Replace()呢?

我指的是 Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.Replace()。

0 投票
1 回答
63 浏览

asp.net-core - 清理 ServiceCollection 和 ServiceProvider 的“Pre”实例的正确方法?

我正在我的应用程序中实现自定义配置提供程序。

在该提供程序中,我必须进行 REST API 调用。该调用需要有效的 OAuth 2 令牌才能成功。为了得到那个令牌,我需要一个半复杂的类依赖树。

对于我的应用程序的其余部分,我只使用依赖注入来获取所需的实例。但是在设置依赖注入之前调用自定义配置提供程序。

我考虑过制作一个依赖注入的“Pre”实例。像这样:

但是我已经读过,当你制作另一个时ServiceCollection,它可能会导致问题。我想知道避免这些问题的方法。

如何正确清理ServiceCollectionand的“pre-DI”实例ServiceProvider

(注意:似乎都没有实现 IDisposable。)

0 投票
1 回答
91 浏览

c# - C# 如何跨库边界在 IServiceCollection 中建立集合?

List<ICommand>我通过构造函数注入一个通用列表。我的库的用户应该能够添加他们自己的ICommand. 所有ICommand实现在编译时都是已知的。目前,我添加ServiceCollection了以下内容(我意识到还有其他方法可以做到这一点):

这适用于添加ICommand当前库中定义的实现。但是,我希望其他人使用我的库并添加他们自己的ICommand. ICommand他们如何从这个List<ICommand>库之外添加自己的?

我正在使用这个特定的例子List<T>来理解一个更普遍的问题:“你如何使用”建立一个对象库边界ServiceCollection

0 投票
1 回答
41 浏览

c# - .NET Core 3.1 框架提供 DI - 如何获取已注册类型的实例?

在我的 .NET Core 3.1Startup.cs中,我试图获取已注册类型的实例,即IBusinessLogicusing IServiceCollection,但它不起作用。

如何在 .NET Core 3.1 中获取已注册类型的实例?

0 投票
1 回答
110 浏览

c# - .NET Core 依赖注入 - 如何处理手动创建的实例?

像下面的代码一样,我必须使用工厂/函数注册容器的方式,因为我提前不知道“userId”属性的值,但只能在运行时。这是有效的,功能方面没有问题。

由于这里我使用的是“new IDBCache”,因为链接框架不会自动处理服务。

问题

  1. 要让框架自动处理服务,有什么出路吗?

  2. 容器。AddSingleton <Func<string, IDBCache>> (p=> (userId) => new IDBCache(userId, p.GetService()));

由于我只是注册 func/factory 的定义而不是服务对象(如“BLogic”),因此 AddSingleton 是否比使用下面的“AddScoped”或“AddTransisent”提供任何优势?

0 投票
1 回答
33 浏览

.net-framework-4.8 - 如何在 Net48 自托管应用程序中使用 DependencyResolver?

我得到了一个任务,其中包含创建一个包含“HttpSelfHostServer”的 .Net 4.8 应用程序。我一直在寻求将“IServiceCollection 服务”分配给 config.DependencyResolver(System.Web.Http.Dependencies.IDependencyResolver 类型)

我真的不想使用 autofac 或其他框架,但我能找到的所有指南都指向这些框架。微软不是提供了一种方法吗?

0 投票
1 回答
65 浏览

c# - 使用 ILogger没有构造函数注入

我有我的注册和构造函数设置来通过 Microsoft.Extensions.Logging 使用日志记录,如下所示,

public MyService(ILogger<MyService> logger) {}

不过,我想做的是services.AddSingleton()在我的 Startup.cs 中使用以避免使用构造函数注入。原因是它需要在测试服务时修改所有单元测试以模拟记录器。
我相信有一种方法可以在 ServiceCollection 中注册 ILogger 的特定实例,但我无法理清所需的语法。

谢谢!

0 投票
2 回答
27 浏览

dependency-injection - .NET Core 依赖注入,用于多级、多实现依赖

我遇到过几篇文章,其中一个接口由多个类实现,并且依赖项已注册和解析。一篇这样的帖子就是这个

但是如何解决多个、多层次的依赖关系呢?

例如:

ShortEnum可以用作键。这意味着根据它的值,返回ConProviderDonProvider返回。现在,提供者对 有依赖关系ISomeValidator,这又取决于 的键值ShortEnum可以解析为ConValidatoror的实例DonValidator

换句话说,我想构建以下两个对象图:

使用 .NET Core 3.1 内置依赖注入机制的最佳方式是什么?

0 投票
1 回答
86 浏览

asp.net-core - '某些服务无法构造(验证服务描述符时出错'ServiceType:IHostedService

我正在使用 .NET 5,我想使用IHostedServiceclassess 运行后台任务,如您所见:

所以我必须将它注入到服务集合中,如您所见:

但是在添加这个之后我得到了这个错误:

System.AggregateException:'某些服务无法构造(验证服务描述符时出错'ServiceType:Microsoft.Extensions.Hosting.IHostedService Lifetime:Singleton ImplementationType:MIMS.Portal.ScheduleJobs.PasargadJobs':无法使用范围服务'Microsoft .EntityFrameworkCore.DbContextOptions`1[MIMS.Portal.Infrustructure.Repositories.AppDbContext]' 来自单例'Microsoft.Extensions.Hosting.IHostedService'。)'

这是我的startup.cs