gpt4 book ai didi

c# - 如何注册两个实现然后在 .Net Core 依赖注入(inject)中获得一个

转载 作者:可可西里 更新时间:2023-11-01 08:46:37 26 4
gpt4 key购买 nike

我的部分代码依赖于同一接口(interface)的多个实现,而其他部分依赖于其中一个实现。

我正在注册如下实现:

services.AddSingleton<MyInterface, FirstImplementation>();
services.AddSingleton<MyInterface, SecondImplementation>();

然后在需要时获取两个实现,例如:

var implementations= serviceProvider.GetServices<MyInterface>();

我的问题是当我需要其中之一时,我正在尝试以下返回 null 的方法:

var firstImplementation= serviceProvider.GetService<FirstImplementation>();

当然我可以使用:

var implementations= serviceProvider.GetServices<MyInterface>();
foreach (var implementation in implementations)
{
if (typeof(FirstImplementation) == implementation.GetType())
{
FirstImplementation firstImplementation = (FirstImplementation)implementation;
}
}

但我想我可以通过某种方式直接获取我的FirstImplementation

最佳答案

当请求MyInterface 时,容器知道如何解析FirstImplementation,但是却不知道如何解析FirstImplementation特别要求 FirstImplementation

内置服务容器旨在满足框架和构建在其上的大多数消费者应用程序的基本需求。它很简单,需要明确配置才能按预期运行。当明确要求实现时,您还需要告诉它如何获取实现

//register implementations first
services.AddSingleton<FirstImplementation>();
services.AddSingleton<SecondImplementation>();

//register interfaces using factory that return implementation singleton
services.AddSingleton<MyInterface, FirstImplementation>(p => p.GetService<FirstImplementation>());
services.AddSingleton<MyInterface, SecondImplementation>(p => p.GetService<SecondImplementation>());

所以现在您可以直接获取您的FirstImplementation并获取相同的实例

var firstImplementation = serviceProvider.GetService<FirstImplementation>();

关于c# - 如何注册两个实现然后在 .Net Core 依赖注入(inject)中获得一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50522111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com