gpt4 book ai didi

dependency-injection - IServiceCollection 覆盖单个构造函数参数

转载 作者:行者123 更新时间:2023-12-04 08:23:23 25 4
gpt4 key购买 nike

我有一个接受三个构造函数参数的类。在我的作文根目录中,我只想定义/覆盖 一个 三个构造函数参数中的一个;其他两个依赖项已经映射到我的 DI 容器中,应该从 IServiceProvider 创建。

使用 Ninject 我可以做这样的事情:

Bind<IMyInterface>().To<MyClass>()    
.WithConstructorArgument("constructorArgumentName", x => "constructor argument value");

当 Ninject 创建 MyClass 时,它使用此字符串参数并自动为我注入(inject)其他两个依赖项。我在 .net 核心中遇到的问题是我无法告诉 IServiceCollection 我只想指定三个参数之一,我必须定义所有参数或一个都不定义。例如,在 .net 核心中,这是我必须做的:
services.AddTransient<IMyInterface>(x=> new MyClass("constructor argument value", new Dependency2(), new Dependency3());

我不喜欢创建 Dependency2 和 Dependency3 类的新实例;这两个类可以有自己的构造函数参数。我只想让 DI 管理这些依赖项。所以我的问题是 - 在使用 IServiceCollection 类映射.net 核心中的依赖项时如何覆盖单个构造函数参数?

如果您不能仅覆盖单个构造函数参数,那么如何使用 IServiceCollection 解决依赖关系?我试着做这样的事情:
services.AddTransient<IMyInterface>(x=> new MyClass("constructor argument value", serviceCollection.Resolve<IDependency2>(), serviceCollection.Resolve(IDependency3>());

但这不起作用,我不知道如何使用 IServiceCollection 解决依赖关系。

最佳答案

试试这个:

services.AddTransient<IDependency2, Dependency2Impl>();

services.AddTransient<IDependency3, Dependency3Impl>();

services.AddTransient<IMyInterface>(provider=>
return new MyClass("constructor argument value",
provider.GetService<IDependency2>(),
provider.GetService<IDependency3>());
);

关于dependency-injection - IServiceCollection 覆盖单个构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38208295/

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