2016-10-17 4 views
0

を働いていない私はシンプルインジェクターフォールバックの登録が

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

? – 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> 
/どのように `Container`がインスタンス化され
+0

ありがとう、なぜそれが動作しませんでしたが、それはあなたのために働いて以来、私は基本から始まり、組み立てられ、それは動作します。私はSimpleInjetorを愛しています:) –

関連する問題