2016-10-17 1 views
0

У меня есть следующиеПростой Injector запасной вариант регистрации открытых родовое не работает

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>

Но Я получаю «Регистрация не найдена для IHandler»

Спасибо

+0

Где/как экземпляр 'Container'? – qujck

ответ

0

Я попытался воспроизвести вашу ошибку, но когда я запустил ее в консольном приложении, все работает так, как ожидалось. Вот код, который я использовал для воспроизведения:

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> 
+0

Спасибо, не знаю, почему это не сработало, но так как это сработало для вас, я начал с основного и построил, и он действительно работает. Я люблю SimpleInjetor :) –

Смежные вопросы