gpt4 book ai didi

c# - 使用依赖注入(inject)进行硬件抽象

转载 作者:行者123 更新时间:2023-11-30 17:43:21 24 4
gpt4 key购买 nike

我一直在研究与硬件抽象相关的依赖注入(inject)。所以,基本上我有一些我想从 C# 应用程序中控制的硬件设备。这些设备通常有一个根设备,用于访问叶子设备。结构非常简单:LeafDevice1 & 2 通过 Interface1 连接到 RootDevice1,LeafDevice3 连接到 RootDevice2 等等。

现在我想我可以通过依赖注入(inject)解决这个问题,因为“叶”设备通常不关心它们是如何连接的,只要它们连接到指定的接口(interface)即可。但我想知道使用 IOC 容器的依赖注入(inject)是否真的是最好的方法。我怀疑的主要原因是:我一直使用命名依赖项。如果我将设备 B 和 C 连接到根设备 A,我想确保它们指的是完全相同的设备。此外,我使用了很多单例范围,因为命名依赖项 xyz 应该只存在一次。

所以在我的情况下,配置容器意味着将许多命名依赖项粘合在一起。

据我了解,当您想指定将注入(inject)哪个实现时,使用 IOC 容器最有意义。但据我所知,我正在使用容器来管理在何处使用哪个特定对象。当然,上述对象的实际实现可能有所不同,但更多的是“什么用在什么地方?”不是“使用哪个实现”的问题。

构建一个我可以用来访问我的设备的设备树之类的东西不是更好吗?

Bind<RootDevice>().ToConstructor<RootDevice>(e => new RootDevice(serialNumber))
.InSingletonScope().Named("ConcreteRootDevice");

Bind<IBusMaster>().ToMethod<IBusMaster>(e => e.Kernel.Get<RootDevice>("ConcreteRootDevice")
.GetBusMaster(0)).Named("ConcreteBus1");

Bind<IBusMaster>().ToMethod<IBusMaster>(e => e.Kernel.Get<RootDevice>("ConcreteRootDevice")
.GetBusMaster(1)).Named("ConcreteBus2");

Bind<IBusMaster>().ToMethod<IBusMaster>(e => e.Kernel.Get<RootDevice>("ConcreteRootDevice")
.GetBusMaster(2)).Named("ConcreteBus3");
Bind<IBusMaster>().ToMethod<IBusMaster>(e => e.Kernel.Get<RootDevice>("ConcreteRootDevice")
.GetBusMaster(3)).Named("ConcreteBus4");

Bind<LeafDevice>().ToConstructor<LeafDevice>(o =>
new LeafDevice(o.Context.Kernel.Get<IBusInterface>("ConcreteBus1")))
.Named("ConcreteLeafDevice1");

Bind<LeafDevice>().ToConstructor<LeafDevice>(o =>
new LeafDevice(o.Context.Kernel.Get<IBusInterface>("ConcreteBus1")))
.Named("ConcreteLeafDevice2");

Bind<LeafDevice>().ToConstructor<LeafDevice>(o =>
new LeafDevice(o.Context.Kernel.Get<IBusInterface>("ConcreteBus2")))
.Named("ConcreteLeafDevice3");

在这个例子中,LeafDevices 将依赖于一个抽象的 IBusInterface 来与实际的硬件设备进行通信。 Root Device 提供了多个 BusMasters,可用于与所述叶设备进行通信。

提前致谢

最佳答案

根据我的经验,如果您在应用程序中大量使用单例和/或轻量级模式,则​​值得使用 DI 容器来创建其单例范围的实例。

不要重新发明轮子,也不要不要重复自己 两者都满意了。

唯一的考虑因素是性能。如果使用 DI 容器符合性能规范/期望,那么使用它!它们经过了良好的测试,更加专业和稳定,您可以从头开始编写。

关于c# - 使用依赖注入(inject)进行硬件抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31051071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com