2017-04-03 14 views
0

Unityでジェネリックインターフェイスを登録することに関して複数のスレッドを見ましたが、残念ながら実際に動作させることはできませんでした。これは定義されているインターフェースです。Unityとの汎用ハンドラインターフェイスの登録

public interface IHandler<in TCommand>{} 

例クラス:

public class MyTestHandler : IHandler<TestCommand> 
{} 

私はその後、工場でそれらを解決しようとしている:

public IHandler<TCommand> Create<TCommand>() 
    { 
     return _container.Resolve<IHandler<TCommand>>(); 
    } 

私は次のように私のハンドラを登録しようとしました:

container.RegisterTypes(AllClasses.FromLoadedAssemblies().Where(type => typeof(IHandler<>).IsAssignableFrom(type)), WithMappings.FromAllInterfaces, WithName.TypeName, WithLifetime.Transient); 

コンクリートハンドラーを正式に登録することはできません。どんな提案も素晴らしいだろう。

ありがとうございます。

答えて

0

問題はWhereです。条件:IHandler<>MyTestHandlerから割り当て不可能であり、登録がないためです。それが見えた、私は条件が名前「ハンドラ」が含まれているすべてのタイプを見つける更新されたテストのために

internal class Program 
{ 
    static void Main(string[] args) 
    { 
     var container = new UnityContainer(); 

     container.RegisterTypes(AllClasses.FromLoadedAssemblies().Where(type => type.Name.Contains("Handler")), WithMappings.FromAllInterfaces, WithName.Default, WithLifetime.Transient); 
     var instance = container.Resolve<IHandler<TestCommand>>(); 
     var instance2 = container.Resolve<IHandler<TestCommand2>>(); 
    } 
} 

public interface IHandler<TCommand> 
{ 
} 

public class MyTestHandler : IHandler<TestCommand> 
{ 
} 

public class TestCommand 
{ 
} 
public class MyTestHandler2 : IHandler<TestCommand2> 
{ 
} 

public class TestCommand2 
{ 
} 
+0

これは私のために正常に動作、つまり、instanceMyTestHandlerinstance2MyTestHandler2を受信する受信しますそれらを登録するが、まだそれらを解決しなかった。 –

関連する問題