2016-03-18 9 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 
    .... 
} 

Ich habe Folgendes versucht, aber ich bekomme die Ausnahme unten aufgeführt. Beachten Sie, dass die Ausnahme auf die abstrakte Basisklasse verweist. Was vermisse ich?autofac Registrieren geschlossene Unterklassen von abstrakten öffnen generische

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

Keine Konstrukteure auf Typ 'Base`1 [Someclass]' können mit dem Konstruktor Finder 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' gefunden werden.

+0

Können Sie Ihre Konstruktorimplementierungen zeigen. –

+0

Bearbeitet, um einfache Konstruktoren anzuzeigen. Ich nehme an, ich vermisse etwas in der Registrierung, aber ich weiß nicht was. – Suedeuno

Antwort

2

Ich denke, Sie mischten sich mit generischen und nicht generischen abstrakten Klassenregistrierungen.

Sie haben generische abstrakte Klasse. Daher sollte Ihr Register wie folgt aussehen:

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

Immer noch die Ausnahme. Versuchte das Hinzufügen einer IRepository <> -Schnittstelle zu den abstrakten und tun builder.RegisterAssemblyTypes (typeof (IBase <>). Assembly) .AsClosedTypesOf (typeof (IBase <>)); aber das hat auch nicht funktioniert, obwohl ich Blogs gesehen habe, die behaupten, dass dies der Fall ist. – Suedeuno

+0

Können Sie teilen, wie Sie auch auflösen. Ich habe keinen Fehler bekommen. –

+1

Ich sehe das Problem, der geschlossene Typ des spezifischen generischen Typs, den ich zu lösen versuchte, befand sich in einer anderen Assembly, die nicht registriert war. Bedeutung Ich habe die Typen in der Baugruppe von IBase registriert, aber der Typ innerhalb von <> war in einer anderen Baugruppe, die ich nicht registriert habe. Danke für Ihre Hilfe. – Suedeuno

Verwandte Themen