2016-03-18 16 views
0
public class Sub1 : Base<SomeClass> 
{ 
    // for sake of getting injection to work, not injecting anything in ctor 
    public Sub1() {} 
    .... 
} 

public class Sub2 : Base<SomeOtherClass> 
{ 
    // for sake of getting injection to work, not injecting anything in ctor 
    public Sub2() {} 
    .... 
} 

public abstract class Base<T> 
{ 
    // abstract, so no ctor 
    .... 
} 

私は以下を試しましたが、以下に例外があります。例外がBase抽象クラスを参照していることに注目してください。私は何が欠けていますか?autofac抽象的なオープンな汎用の閉サブクラス

builder.RegisterAssemblyTypes(typeof(Base<>).Assembly) 
       .Where(t => t.IsSubclassOf(typeof(Base<>))).AsClosedTypesOf(typeof(Base<>)).InstancePerDependency(); 

タイプにはコンストラクターBase`1は[工ass] 'コンストラクタファインダ 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' で見出すことができます。

+0

コンストラクターの実装を表示できますか? –

+0

簡単なコンストラクタを表示するように編集しました。私は登録で何かが欠けていると思うが、私は何がわからない。 – Suedeuno

答えて

2

私はジェネリックで抽象クラス以外のものと混在していると思います。

一般抽象クラスがあります。したがって、あなたのレジスターは次のようになります:

builder.RegisterAssemblyTypes(typeof(Base<>).Assembly).AsClosedTypesOf(typeof(Base<>)).InstancePerDependency(); 
+0

まだ例外が発生しています。アブストラクトにIRepository <>インタフェースを追加し、builder.RegisterAssemblyTypes(typeof(IBase <>)アセンブリ)を追加しようとしました.AsClosedTypesOf(typeof(IBase <>));しかし、それはそれが述べているブログを見たにしても、どちらもうまくいきませんでした。 – Suedeuno

+0

解決方法を共有することはできますか?私は間違いを起こさなかった。 –

+1

私が解決しようとした特定のジェネリックタイプの閉じたタイプが、登録されていない別のアセンブリにあるという問題があります。意味私はIBaseのアセンブリで型を登録しましたが、<>内の型は登録していない別のアセンブリにありました。ご協力いただきありがとうございます。 – Suedeuno

関連する問題