打开泛型的简单注入器回退注册不起作用
本文关键字:回退 注册 不起作用 注入器 简单 泛型 | 更新日期: 2023-09-27 18:13:22
我有以下内容
class GetData : Query
class Data : Result
class IHandler<TIn,TOut>
class IQueryHandler<TQuery,TResult> : IHandler<TQuery, IEnumerable<TResult>>
class DefaultQueryHandler<TQuery,TResult> : IQueryHander<TQuery,TResult>
Container.RegisterConditional(
typeof(IHandler<,>),
typeof(DefaultQueryHandler<,>),
c => c!.Handled
)
我遵循这里的指南https://simpleinjector.readthedocs.io/en/latest/advanced.html#registration-of-open-generic-types并认为
Container.GetInstance<IHandler<GetData,IEnumerable<Data>>>
应该实例化DefaultQueryHandler<GetData, Data>
但是我得到'No registration found for IHandler'
Thank you
我试图重现您的错误,但是当我在控制台应用程序中运行它时,一切都如预期的那样工作。下面是我用来复制的代码:
using System;
using System.Collections.Generic;
using SimpleInjector;
class Query { }
class Result { }
class GetData : Query { }
class Data : Result { }
class IHandler<TIn, TOut> { }
class IQueryHandler<TQuery, TResult> : IHandler<TQuery, IEnumerable<TResult>> { }
class DefaultQueryHandler<TQuery, TResult> : IQueryHandler<TQuery, TResult> { }
class Program
{
static void Main(string[] args)
{
var container = new Container();
container.RegisterConditional(
typeof(IHandler<,>),
typeof(DefaultQueryHandler<,>),
c => !c.Handled);
var handler = container.GetInstance<IHandler<GetData, IEnumerable<Data>>>();
Console.WriteLine(handler.GetType().FullName);
Console.ReadLine();
}
}
GetInstance
调用返回以下封闭类型:
DefaultQueryHandler<GetData, Data>