如何将接口与实现分开

时间:2012-03-27 13:47:47

标签: c# .net design-patterns

是否可以将接口与客户端程序集不知道实际实现并且仅在接口上工作的实现分开。如果我们将对象创建卸载到另一个组件,它仍将创建对实际实现类型的依赖。

我可以考虑使用反射这样做,其中一个层负责为作为接口的对象提供服务。类型的实际实例化通过反射完成并存储在字典中,其中键是接口并且值实现对象。这样客户端代码就不知道实现的类型。

是否有设计模式可以在没有反射的情况下执行此操作?

提前感谢您的答案

3 个答案:

答案 0 :(得分:1)

是的,你在这里描述的是IOC(控制容器的反转) - 除了反射你可以使用配置(在app / web.config中)或通过代码引导。

查看一些流行的IOC,例如StructureMapNinject

答案 1 :(得分:1)

反射在动态分配的场景中很有用,例如在基于插件的系统的情况下。如果您不想管理这种环境,只需在代码中声明所有实现,并仅使用消费者中的接口。

问题是,在这两种情况下,在某些情况下,必须有“某人”决定创建哪个真实的类型。如果是基于插件的逻辑,可以是PluginManager,在其他情况下可能是某种factory方法/ calss。

设计模式为IoC,如果您对此不感兴趣。

希望这有帮助

答案 2 :(得分:1)

该模式称为控制反转(IoC)。最常见的应用称为依赖注入(DI)。

您可能会发现该书Dependency Injection in .NET是该主题的宝贵资源。