【发布时间】:2015-10-10 01:35:34
【问题描述】:
我的应用程序有一个 C# 库 Baz.dll 引用 3rd-party(其他团队)库 Foo.dll,其中包含类 FooActuator,由 Baz 直接使用。我想通过声明一个接口IActuator 来打破这种依赖关系,并有一个控制器来实例化IActuator 的正确实现并将其发送到Baz。而且我无法更改Foo。
问题是,这个场景有一堆类,我不想一直写adapter。我正在寻找这样的东西:
FooActuator real = new FooActuator();
IActuator adapter = BuildAdapter<IActuator>(real); // generates adapter for me
Baz.Process(adapter);
是否有提供此功能的库或 .NET 功能?我希望我可以复制或扩展一些东西(即已经生成了一些类和程序集),而不是从头开始使用 System.Reflection.Emit。
【问题讨论】:
-
我不太明白你为什么需要适配器模式。为什么不能让
FooActuator实现IActuator并使用(例如)IoC 容器? -
您是否正在寻找一种方法让
FooActuator表现得好像它继承自IActuator,即使它不在代码中?如果是这样,您是否有什么理由不想拥有FooActuator : IActuator? -
@TeaDrivenDev 感谢您的评论。我已经编辑了我的问题。确实缺少一个关键信息:
Foo来自另一个团队。我不能碰那个。拥有IActuator的原因是允许像往常一样对Baz进行单一测试。 -
附带说明 - 如果您有另一个团队构建您需要使用的东西,但您无法使用通用抽象,您可能会遇到组织问题.
-
@TeaDrivenDev 我认为你假设太多了。有许多由不同团队、社区和组织提供的第三方库,它们有明确的、明确定义的目的,不需要抽象接口。这些库的使用者可以选择直接调用它,或者通过接口和适配器隔离调用。
标签: c# .net oop design-patterns f#