2017-02-06 8 views
2

Unityを使用して抽象クラスを解決したい。 抽象クラスには特定のジェネリックを持つ実装があります。たとえば:ジェネリックスに基づいて抽象クラスを解決する

UnityContainer.Resolve<Iface<SomeClassExample, OtherClassExample>>(); 

しかし、それはエラー例外がある与えます:

public abstract class Iface<S, T> where S : SomeClass where T : OtherClass 

public class face : Iface<SomeClassExample, OtherClassExample> 

は、その後、私は実行したい

例外InvalidOperationException - 抽象クラスのインスタンスを作成することはできません。

私は抽象クラスを作成したいので、明らかです。私はUnityがジェネリックスに基づいて特定のクラスを見つけるのに十分にスマートであることを望んだ。このようなことは可能ですか?

+3

ユニティは依存性注入容器であり、魔法のランプではありません。リフレクションを介して実装を登録する。 – Dbl

+0

はい、 'face'をUnityに登録する必要があります。コードが' Iface 'を問い合わせるときに' face'を使用するように指示する必要があります。 – Brandon

+0

顔を登録する必要がある場合、ここで反射を使用する点は何ですか?私はnew face()を呼び出すこともできます。 – Wouter

答えて

0

を登録Iface<SomeClassExample, OtherClassExample>

UnityContainer.Resolve<face<SomeClassExample, OtherClassExample>>(); 

のインスタンスを作成しようとしています正しいジェネリックでマップしてください。

UnityContainer.RegisterType<Iface<SomeClassExample, OtherClassExample>, face>(); 

にもかかわらず、私はUnityは...

編集自動的に特定のジェネリック医薬品に属して適切なクラスを認識することが可能であるべきと考えている: 実際に方法はあります!

UnityContainer.ConfigureAutoRegistration().Include(type => type.ImplementsOpenGeneric(typeof(Iface<,>)), Then.Register().AsFirstInterfaceOfType()).ApplyAutoRegistration(); 

この基本クラスを実装するすべての汎用派生クラスを自動的に登録します。

0

faceクラスを解決するために明示的に質問する必要があります。ただ、エラーメッセージを見て、あなたがインターフェイス—としてのifaceを使用する場合は、明示的に顔を登録する必要がありますインターフェイスを作成し、それを

関連する問題