首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在基于组件的框架中注入或不注入依赖项

在基于组件的框架中注入或不注入依赖项
EN

Software Engineering用户
提问于 2015-08-13 19:48:50
回答 1查看 285关注 0票数 0

我目前正在开发一个基于组件的小型框架,即Android平台。该框架有一些可供使用的组件和一些抽象组件(有一些内部逻辑,但开发人员需要添加一些代码以使其充分发挥功能)。所有组件之间的通信都是通过接口满足的。我的问题是:

知道某些组件有依赖关系,我的框架应该自动提供它们?

我有一个“需要”B组件的A组件。起初,我想到了两个解决方案:

  1. 当开发人员实例化组件A时,我的框架应该自动创建和注入B组件。如果B是抽象组件,我将创建并提供它的默认实例。
  2. 该框架应在API中解释A组件需要B组件,然后留给开发人员实例化B组件并将其作为依赖项传递给A。

在第二种解决方案中,开发人员还可以创建一个新组件,它尊重与A组件的约定(接口),然后使用它。

这些解决方案中的哪一个将导致框架和开发人员代码的更好的维护、灵活性和扩展?我接受其他解决办法。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2015-08-14 09:29:32

同时做

如果您正在创建一个框架,灵活性是关键。大多数框架提供接口和默认实现以及连接到缺省值的空构造函数,但允许您通过传递自己的实现或传递框架提供的替代实现来覆盖行为。

代码语言:javascript
运行
复制
public interface IReader { string Read(); }
public interface IWriter { void Write(String str); }

public class DefaultReader: IReader
{
    public string Read()
    {
        File.ReadAll("c:\myfile.cnf");
    }
}

public class DefaultWriter: IWriter
{
    public void Write(String str)
    {
        File.Write("c:\myfile.cnf", str);
    }
}

public class MyFrameWorkClass
{
    private IReader reader;
    private IWriter writer;

    public MyFrameWorkClass():
        this(new DefaultReader(), new DefaultWriter())
    {
    }

    public MyFrameWorkClass(IReader reader, IWriter writer)
    {
        this.reader = reader;
        this.writer = writer;
    }
}

框架以这种方式工作的原因很简单:它们不能提供任何DI,因为这内在地将它们与DI框架联系在一起。他们唯一能做的(而且应该做的)就是提供可以很容易地被DI处理的类。如果您要获得最终的灵活性,那么上面的代码也有可以分配的公共属性。这样,任何DI框架都可以插入并使用基于构造函数或基于属性的注入。

如果您想为您的对象提供大量的直截了当的DI,您将需要为您的框架创建单独的组件来进行绑定。例如,如果我在DI中使用Castle,我会提供一个可以插入的安装程序类。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/293658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档