我们正在尝试在DAL之上构建某种类型的层,以使用泛型公开某些存储库方法的接口。

例如:

public interface A
{
    void Do_A();
}

public interface B
{
    void Do_B();
}

public void Main()
{
     Exposer<A>.Do_A();
     Exposer<B>.Do_B();
}


有可能这样做吗?

最佳答案

从技术上讲,这不是“单个类”,因为Exposer<A>Type不同。但是,最终,这与大多数IoC / DI容器看起来并没有太大的区别……如果这是例如StructureMap(仅作为示例),则可以考虑:

container.GetInstance<A>().Do_A();
container.GetInstance<B>().Do_B();


当然,您需要配置容器以了解具体的Exposer<B>A实现的来源!用于StructureMap is shown here,但有plenty to choose from

如果直接说的话,那么:否。您不能:

class Exposer<T> : T {...} // non-working code to implement the interface T


但是,您可以上一些课:

class Exposer : A, B {...}


然后投射:

A a = Exposer;
a.Do_A();
B b = Exposer;
b.Do_B();

08-26 15:14