首页 > 解决方案 > 容器类的 C# DI 实例化(IList、IEnumerable、...)

问题描述

使用依赖注入,应该如何创建数据容器的实例,如 List、Dictionary 等。

给出以下示例:

    public interface IXyz { }

    public class Xyz : IXyz { }

创建一个简单的列表是否违反样式模式?像这样:

    public class Abc
    {
        IList<IXyz> _data = new List<IXyz>();

        public Abc()
        {
        }
    }

或者我应该使用 DI 并让我的容器为我解析列表?像这样:

    public class Abc
    {
        IList<IXyz> _data;

        public Abc(IList<IXyz> list)
        {
            _data = list;
        }
    }

还是完全不同的东西?

标签: c#dependency-injection

解决方案


为了回答这个问题,您应该首先回答以下问题:

  1. 您想Abc对实现的生命周期做出任何决定IXyz吗?

    如果答案是肯定的 - 在里面创建一个项目列表Abc。否则 - 使用 DI 容器。

  2. 实现是否IXyz取决于系统的任何横切关注点

    如果答案是肯定的- 使用 DI 容器。否则 - 继续创建/填充里面的列表Abc


推荐阅读