C# 包含两个内部服务和依赖项注入的Facade-设计模式方法
我想创建Facade类来处理两个服务上的一些操作。 为了联系这些服务,我有代理类 每个服务都有抽象代理和派生代理-如何创建架构的这一部分,以避免在Facade中解析C# 包含两个内部服务和依赖项注入的Facade-设计模式方法,c#,design-patterns,dependency-injection,facade,proxy-pattern,C#,Design Patterns,Dependency Injection,Facade,Proxy Pattern,我想创建Facade类来处理两个服务上的一些操作。 为了联系这些服务,我有代理类 每个服务都有抽象代理和派生代理-如何创建架构的这一部分,以避免在Facade中解析 class Facade { private Proxy proxy1; private Proxy proxy2; public Facade() { //I don't like this part proxy1 = ...Resolve<Proxy1Typ
class Facade
{
private Proxy proxy1;
private Proxy proxy2;
public Facade()
{
//I don't like this part
proxy1 = ...Resolve<Proxy1Type>();
proxy2 = ...Resolve<Proxy2Type>();
}
public void Do()
{
proxy1.Call();
proxy2.Call();
}
}
abstract class Proxy {public void Call();}
class Proxy1Type : Proxy {public void override Call(){}}
class Proxy2Type : Proxy {public void override Call(){}}
有两种相反的方法,您在问题中展示了这两种方法。您可以使用(第一个示例)解析类内部的依赖项,也可以使用从外部注入依赖项 依赖项注入(在您的案例中)有几个优点:
Facade
类需要什么才能正常运行,因为您不需要在类内部挖掘来确定它将尝试解决什么问题(以及何时解决)Facade
类更容易,因为您可以通过构造函数注入测试双倍体;不需要在单元测试中配置DI容器class Facade
{
private IProxy proxy1;
private IProxy proxy2;
//I feel it's still wrong
public Facade(IProxy1Type p1, IProxy2Type p2)
{
proxy1 = p1;
proxy2 = p2;
}
public void Do()
{
proxy1.Call();
proxy2.Call();
}
}
interface IProxy { void Call();}
interface IProxy1Type : IProxy{}
interface IProxy2Type : IProxy {}
class Proxy1Type : IProxy1Type { public void Call() { } }
class Proxy2Type : IProxy2Type { public void Call() { } }