2013-10-07 28 views
0

目前我使用一个通用接口声明的IoC依赖这样的:设计,可以“实现N次”

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

可是偏偏我的实现可以有在同一时间超过一个依赖。

我知道这很荒谬,但只是为了你们明白我需要什么... 假设我实现接口多次以解决我的问题:

public class MyClass : IComposition<TypeA>, IComposition<TypeB> 
{ 
    ... 
} 

我相信使用IComposition<T1, T2, ...>或一个ITypeXDependent对于每种类型都不是很好的选择。 我的核心需要在运行时使用反射来解决依赖关系。所以,这就是为什么我不通过构造函数传递依赖关系。

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

+7

你为什么不能简单地实现该接口多次,因为你已经说明? –

+2

这种界面的原因似乎完全避开了我。你为什么想要这样的东西? –

+3

另外,你有没有考虑通过构造函数注入你的依赖,而不是接口继承?无论如何,在测试过程中处理和使用会更容易。 –

回答

1

除了常规接口,通用的接口可以“实现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; } 
} 
5

我会使用,代替目前的方案构造函数的参数设置依赖关系:

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