我有一个泛型接口,其中包含两个具有严格泛型约束的类型参数,以及针对不同组合的多个实现。
public interface IResolver<TIn, TOut> where ... {...}
我想创建一个(静态)解析器工厂,它将存储已知实现的实例,并按照以下方式为它们提供服务:
public static ResolverFactory{
public static IResover<TIn, TOut> GetResolver<TIn, TOut> where ... ()
{
//access some storage dictionary to return the correctly typed instance
}
}
我怎样才能创建这样一个容器,它将同时存储IResover<Entity1, Entity2>
和IResolver<Entity3, Entity4>
?
我能想到的一种选择是使用单独的非通用“标记”接口,例如:
public interface IResolver {}
public interface IResolver<TIn, TOut> : IResolver where ....
{...}
并使用
Dictionary<Type, Dictionary <Type, IResolver>> storage;
public RegisterResolver(IResolver resolver)
{
//add to storage - how?
}
但是这种情况基本上会使对泛型参数的约束无效。此外,在添加 时,或多或少不可能IResolver
获得 的泛型类型。IResolver<TIn, TOut>
有没有更好的解决方案?