Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建具有依赖关系的多个子项的服务_C#_Dependency Injection - Fatal编程技术网

C# 创建具有依赖关系的多个子项的服务

C# 创建具有依赖关系的多个子项的服务,c#,dependency-injection,C#,Dependency Injection,如果我想要一个服务来创建多个具有可注入依赖项的对象,我该如何编写代码 公共类MyCreator:ICreator { 专用只读IAdapter\u适配器; 公共MyCreator { _适配器=适配器; } 公共列表地图 { 列表mo=新列表; foreach对象映射对象映射对象映射中的otm { mo.添加新的MappedObjectotm,注入依赖性部门; } } } 如果我向DI注册MyCreator,它会知道如何提供InjectedDependence吗 编辑:InjectedDepe

如果我想要一个服务来创建多个具有可注入依赖项的对象,我该如何编写代码

公共类MyCreator:ICreator { 专用只读IAdapter\u适配器; 公共MyCreator { _适配器=适配器; } 公共列表地图 { 列表mo=新列表; foreach对象映射对象映射对象映射中的otm { mo.添加新的MappedObjectotm,注入依赖性部门; } } } 如果我向DI注册MyCreator,它会知道如何提供InjectedDependence吗

编辑:InjectedDependence不是一个应传递给每个MappedObject的实例。我希望每个新MappedObject都有一个InjectedDependence的新实例

也许这意味着我必须创建某种工厂对象,它知道如何创建InjectedDependence的实例。我不能提供更多的代码,因为我不知道如何用C语言表达我需要的东西


我正在使用.NET Core 2.2的内置DI。

为了保持代码的可测试性,您需要在MyCreator构造函数中注入InjectedDependence的实现。

您确实需要一个工厂:

public class MyCreator : ICreator
{
  private readonly IInjectedDependencyFactory _factory;

  public MyCreator(IInjectedDependencyFactory factory)
  {
    _factory = factory;
  }

  public List<MappedObjects> Map()
  { 
     return ObjectToMap.Select(otm => new MappedObject(otm, _factory.Create())).ToList();
  }
}
显然,您必须编写工厂类和接口,并将它们注册到DI容器中


您还可以注入DI容器本身,即IServiceProvider,以便直接从容器获取新服务,因为容器已经是一个工厂。然而,许多人可能认为这是一种代码气味和服务定位器模式,这是它现在不会被高度重视的。其他人可能认为在工厂顶部实施工厂是浪费的。我想没有正确的方法,不管你做什么,你都必须和一些人一起生活,他们认为这是错误的。

你用什么来进行依赖注入?这是什么版本的.NET?你能展示实际的代码吗?请提供一个最小的可重复的例子,如果可能的话,包括你的预期结果。你可能还想问自己,为什么需要它。映射对象通常是数据容器,而注入的依赖关系往往是逻辑的。为什么要将它们混合在一个对象中?在我的例子中,MappedObject是一个容器,而InjectedDependence是我希望与容器的每个实例组合的逻辑。