C# 设计的接口可以是;实施N次”;

C# 设计的接口可以是;实施N次”;,c#,oop,interface,C#,Oop,Interface,目前,我使用一个通用接口来声明IoC依赖项,如下所示: public interface IComposition<T> { T Dependency { get; set; } } 公共接口i组合 { T依赖项{get;set;} } 但我的实现可能同时具有多个依赖项 我知道这很可笑,但只要你们明白我需要什么。。。 假设我多次实现该接口以解决我的问题: public class MyClass : IComposition<TypeA>, ICompositio

目前,我使用一个通用接口来声明IoC依赖项,如下所示:

public interface IComposition<T>
{
  T Dependency { get; set; }
}
公共接口i组合
{
T依赖项{get;set;}
}
但我的实现可能同时具有多个依赖项

我知道这很可笑,但只要你们明白我需要什么。。。 假设我多次实现该接口以解决我的问题:

public class MyClass : IComposition<TypeA>, IComposition<TypeB>
{
  ...
}
公共类MyClass:IComposition,IComposition
{
...
}
我认为对每种类型使用
IComposition
或一个
ITypeXDependent
都不是好的选择。 我的核心需要在运行时使用反射解决依赖关系。所以,这就是为什么我不通过构造函数传递依赖项


有人知道一些可以帮助我的技巧吗?

我会使用构造函数参数而不是您当前的方案来设置依赖项:

public class MyClass
{
    public void MyClass(TypeA a, TypeB b)
    {
        ....
    }
}

我将使用构造函数参数而不是当前方案来设置依赖项:

public class MyClass
{
    public void MyClass(TypeA a, TypeB b)
    {
        ....
    }
}

除了常规接口,通用接口可以“实现N次”,因为使用的每个通用类型参数都会创建另一个接口类型。唯一需要注意的是显式实现接口:

public interface IComposition<T>
{
    T Dependency { get; set; }
}

public class MyClass: IComposition<TypeA>, IComposition<TypeB>
{
    IComposition<TypeA>.TypeA Dependency { get; set; }
    IComposition<TypeB>.TypeB Dependency { get; set; }
}
公共接口i组合
{
T依赖项{get;set;}
}
公共类MyClass:IComposition,IComposition
{
IComposition.TypeA依赖项{get;set;}
IComposition.TypeB依赖项{get;set;}
}

除了常规接口之外,通用接口可以“实现N次”,因为使用的每个通用类型参数创建另一个接口类型。唯一需要注意的是显式实现接口:

public interface IComposition<T>
{
    T Dependency { get; set; }
}

public class MyClass: IComposition<TypeA>, IComposition<TypeB>
{
    IComposition<TypeA>.TypeA Dependency { get; set; }
    IComposition<TypeB>.TypeB Dependency { get; set; }
}
公共接口i组合
{
T依赖项{get;set;}
}
公共类MyClass:IComposition,IComposition
{
IComposition.TypeA依赖项{get;set;}
IComposition.TypeB依赖项{get;set;}
}

为什么您不能像您所说明的那样多次实现该接口?我似乎完全不明白为什么要实现这样一个接口。为什么您想要这样的东西?另外,您是否考虑过通过构造函数注入依赖项,而不是通过接口继承?无论如何,在测试过程中处理和使用都会容易得多。@LasseV.Karlsen我甚至没有想到通过显式实现就可以做到这一点。谢谢@DanielHilgarth My core需要在运行时使用反射解决依赖关系。所以,这就是我想到的…为什么你不能简单地实现接口多次,正如你所说明的那样?这样一个接口的原因似乎完全回避了我。为什么您想要这样的东西?另外,您是否考虑过通过构造函数注入依赖项,而不是通过接口继承?无论如何,在测试过程中处理和使用都会容易得多。@LasseV.Karlsen我甚至没有想到通过显式实现就可以做到这一点。谢谢@DanielHilgarth My core需要在运行时使用反射解决依赖关系。所以,这就是我想到的。。。