C# 界面注入

C# 界面注入,c#,.net,interface,C#,.net,Interface,是否可以将接口注入到我无法更改的现有第三方类中?与扩展方法类似,但用于接口(及其注入到的类的实现) 我喜欢通过给两个库中相似的类提供相同的接口,选择使用两个相似的第三方库中的一个。因此,我不必将这些类转换为我的类。只要你在处理接口,为什么不把类包装在你自己的类中,实现接口呢?我不完全理解你关于注入接口的意思,但你可以使用该模式来实现这一点。另见: 创建自己的接口,然后创建自己的实现接口的类,这些类包含/包装第三方类。您应该查看允许您通过组合扩展类的 e、 g。 给定实现InterfaceA的密封

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


我喜欢通过给两个库中相似的类提供相同的接口,选择使用两个相似的第三方库中的一个。因此,我不必将这些类转换为我的类。

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

我不完全理解你关于注入接口的意思,但你可以使用该模式来实现这一点。另见:

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

您应该查看允许您通过组合扩展类的

e、 g。 给定实现InterfaceA的密封A类:

public interface InterfaceA
{
    int A {get; set;}
}

public sealed Class A : InterfaceA
{
    public int A {get;set;}
}
您可以扩展InterfaceA,然后使用装饰器类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;
    }
}

我也很喜欢这个。不久前我在博客上写过这件事:很遗憾,类不能在事后调整接口,就像在Haskell中对类型和类型类所做的那样。看起来你没有仔细阅读我的问题。如果class A是第三方库类之一,那么我不可能添加InterfaceA。看起来你误解了我的意思;我概述了A类结构,它可以在您自己的代码中,也可以在第三方库中。不管怎样,它是密封的,你不能改变它。类B和C是您在自己的类中编写的代码。