加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖注入 – 用户输入依赖注入的最佳策略是什么?

发布时间:2020-12-14 04:51:54 所属栏目:百科 来源:网络整理
导读:我已经使用了相当多的依赖注入,但我想获得有关如何在运行时处理来自用户的信息的输入. 我有一个连接到com端口的类.我允许用户选择com端口号.现在,我将该com port参数作为构造函数参数.原因是如果没有那些信息,类就无法运行,而且它的实现是特定的(这个类的模
我已经使用了相当多的依赖注入,但我想获得有关如何在运行时处理来自用户的信息的输入.

我有一个连接到com端口的类.我允许用户选择com端口号.现在,我将该com port参数作为构造函数参数.原因是如果没有那些信息,类就无法运行,而且它的实现是特定的(这个类的模拟版本不需要com端口).

另一种方法是使用“开始”方法接收com端口,或者具有设置com端口的属性.这使得它与IoC容器非常兼容,但从类的角度来看它并不一定有意义.

似乎逻辑路由与依赖注入设计冲突,但这是因为我的UI正在获取特定类型的类的信息.

其他替代方法包括使用IoC容器,它允许我传入额外的构造函数参数,或者只是在顶层构建我需要的类而不使用依赖注入.

对于这类问题,是否存在普遍接受的标准模式?

解决方法

根据您的需要,您可以选择两条路线.

1.将UI直接连接到您的具体类

这是最简单的选择,但很多时候完全可以接受.虽然您可能拥有包含大量接口和使用DI的域模型,但UI构成了对象图的组合根,您可以在此处简单地连接您的具体类,包括您需要的端口号参数.

好处是这种方法简单易懂,易于理解和实施.

缺点是你的灵活性会降低.您将无法随意替换另一个实现(但是,您可能不需要这种灵活性).

即使将UI锁定为具体实现,这并不意味着域模型本身在其他应用程序中不可重用.

2.添加抽象工厂

另一种选择是添加另一层间接.它可以使用抽象工厂来创建实例,而不是让UI直接创建类.

工厂的Create方法可以将端口号作为输入,因此该抽象属于UI子层中的最佳.

public abstract class MyFactory
{
    public abstract IMyInterface Create(int portNumber);
}

然后,您可以将您的DI容器连接到此工厂的实现,该工厂使用端口号并将其作为构造函数参数传递给您的实际实现.其他工厂实现可能只是忽略该参数.

这种方法的优点是您不会污染您的API(或您的具体实现),并且您仍然可以灵活地为接口编程.

缺点是它增加了另一层间接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读