将多个通用接口传递给方法

Ing*_*mar 2 c# generics

我试图将多个通用接口作为参数传递给我的一个类的构造函数.

以下代码无法编译:

public interface IPosterGenerator<T>
{
    IQueryable<T> GetPosters();
}

public class Pinboard
{
    public Pinboard(IPosterGenerator<A> firstPosterGenerator, IPosterGenerator<B> secondPosterGenerator, IPosterGenerator<B> thirdPosterGenerator)
    { 
    }
}
Run Code Online (Sandbox Code Playgroud)

我有大约一百种不同类型的海报生成器.它们都继承自IPosterGenerator接口.当我实例化一个新的Pinboard时,我需要将三个IPosterGenerators传递给pinboard的构造函数.但是,这三个IPosterGenerators中的每一个都是不同类型的.这就是我想出这个愚蠢的A,B和C的原因.

这可以完成吗?

Jon*_*eet 6

听起来你可能想制作Pinboard通用的:

public class Pinboard<T1, T2, T3>
{
    public Pinboard(IPosterGenerator<T1> generator1,
                    IPosterGenerator<T2> generator2,
                    IPosterGenerator<T3> generator3)
    {
         ...
    }
}
Run Code Online (Sandbox Code Playgroud)

为了更方便调用,您可以同时创建一个通用的方法的非通用类:

public static class Pinboard
{
    public static Pinboard<T1, T2, T3> Create(IPosterGenerator<T1> generator1,
                                              IPosterGenerator<T2> generator2,
                                              IPosterGenerator<T3> generator3)
    {
        return new Pinboard<T1, T2, T3>(generator1, generator2, generator3);
    }
}
Run Code Online (Sandbox Code Playgroud)

那么如果你已经有了发电机,你可以打电话:

// Or whatever...
var board = Pinboard.Create(bigGenerator, smallGenerator, mediumGenerator);
Run Code Online (Sandbox Code Playgroud)