代码之家  ›  专栏  ›  技术社区  ›  Martin

界面注入

  •  4
  • Martin  · 技术社区  · 15 年前

    是否可以将接口注入到我无法更改的现有第三方类中?与扩展方法类似,但是对于接口(以及它被注入到的类的实现)。

    我喜欢任选地使用两个相似的第三方库中的一个,通过给两个库中相似的类提供相同的接口。这样我就不必把那里的类转换成我的类了。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Andy White    15 年前

    我不完全理解注入接口的含义,但是您可以使用 Adapter 实现这一点的模式。另请参见: http://dofactory.com/Patterns/PatternAdapter.aspx

    创建自己的接口,然后创建实现该接口的自己的类,该类包含/包装第三方类。

        2
  •  1
  •   Lasse V. Karlsen    15 年前

    只要你处理的是接口,为什么不把类包装在你自己的类中,实现接口呢?

        3
  •  0
  •   Dr Herbie    15 年前

    你应该看看 Decorator Pattern 它允许您按组合扩展类。

    例如 给定实现InterfaceA的密封类A:

    public interface InterfaceA
    {
        int A {get; set;}
    }
    
    public sealed Class A : InterfaceA
    {
        public int A {get;set;}
    }
    

    可以扩展InterfaceA,然后使用Decorator类B封装类A的实例并提供其他方法。

    public interface MyExtendedInterfaceA : InterfaceA
    {
        int B {get;set}
    }
    
    public class B : MyExtendedInterfaceA
    {
        private InterfaceA _implementsA = new A();
    
        public int A
        {
            get
            {
                return _implementsA.A;
            }
            set
            {
                _implementsA.A = value;
            }
        }
    
        public int B {get; set;}
    }
    

    或者,decorator类C可以添加一个全新的接口:

    public interface InterfaceC
    {
       int MethodC();
    }
    
    public class C : InterfaceA, InterfaceC
    {
    private InterfaceA _implementsA = new A();
    
        public int A
        {
            get
            {
                return _implementsA.A;
            }
            set
            {
                _implementsA.A = value;
            }
        }
    
        public int MethodC()
        {
            return A * 10;
        }
    }