C# 创建具有依赖关系的多个子项的服务
如果我想要一个服务来创建多个具有可注入依赖项的对象,我该如何编写代码 公共类MyCreator:ICreator { 专用只读IAdapter\u适配器; 公共MyCreator { _适配器=适配器; } 公共列表地图 { 列表mo=新列表; foreach对象映射对象映射对象映射中的otm { mo.添加新的MappedObjectotm,注入依赖性部门; } } } 如果我向DI注册MyCreator,它会知道如何提供InjectedDependence吗 编辑:InjectedDependence不是一个应传递给每个MappedObject的实例。我希望每个新MappedObject都有一个InjectedDependence的新实例 也许这意味着我必须创建某种工厂对象,它知道如何创建InjectedDependence的实例。我不能提供更多的代码,因为我不知道如何用C语言表达我需要的东西C# 创建具有依赖关系的多个子项的服务,c#,dependency-injection,C#,Dependency Injection,如果我想要一个服务来创建多个具有可注入依赖项的对象,我该如何编写代码 公共类MyCreator:ICreator { 专用只读IAdapter\u适配器; 公共MyCreator { _适配器=适配器; } 公共列表地图 { 列表mo=新列表; foreach对象映射对象映射对象映射中的otm { mo.添加新的MappedObjectotm,注入依赖性部门; } } } 如果我向DI注册MyCreator,它会知道如何提供InjectedDependence吗 编辑:InjectedDepe
我正在使用.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是我希望与容器的每个实例组合的逻辑。