C#依赖注入,传递参数

问题描述 投票:0回答:1

如何正确使用DI创建构造函数中有参数的对象?例如。 int ID。

public class SomeClass
{
  public SomeClass(int id)
  {
    Id = id;
  }
  public int Id {get;}
}

考虑存储 Id 列表的 ini 文件。我想读取这些值并为每个创建具有特定 id 的 SomeClass 实例。

List<int> ids = readIdsFromIni();
foreach(var id in ids)
{
   ???
}

我认为某个地方应该是 SomeClass 的注册,就像这样

var builder = Host.CreateApplicationBuilder(e.Args);
builder.Services.AddTransient<SomeClass>();

现在我在这些情况下使用抽象工厂,但在这个工厂中我使用直接调用 new SomeClass(id);

谢谢你 彼得

c# dependency-injection
1个回答
0
投票

您的描述缺少很多信息,因此很难理解您将如何使用这些,但您可以这样做 -

foreach (int id in ids)
{
    builder.Services.AddSingleton(serviceProvider => new SomeClass(id))
}

这将为您从文件中读取的每个 ID 注册一个

SomeClass
的实现。请注意,这实际上不会创建实例,它们只会被创建一次(并且如果需要的话)以满足某些其他要求。例如,您可以拥有一个具有如下所示构造函数的服务 -

public class MyService
{
    public MyService(IEnumerable<SomeClass> things)
    {
        // in here, "things" will contain instances for all
        // of the implementations you've registered
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.