0

Ich bin auf der Suche nach einer möglichen Lösung für die folgenden.Autofac. Basisklasse Eigenschaften gelöst ohne spezifische Injektion

Ich habe eine Basisklasse, die eine Abhängigkeit hat, die ich derzeit die Eigenschaft Injektion verwenden, um zu erfüllen.

public class BaseClass { 
    IService SomeService { get; set; } 
} 

Ich habe mehrere Klassen, die von dieser Basisklasse erben.

public class DerivedClass : BaseClass, IDerivedClass { 

} 

Und ich injiziere mit den folgenden.

builder.RegisterType<DerivedClass>().As<IDerivedClass>().OnActivated(e => e.Instance.SomeService = e.Context.Resolve<IService>()); 

Ich mache das für etwa 12 andere Klassen, die die Basisklasse erweitern. Gibt es eine Möglichkeit, dass jede Klasse, die BaseClass erweitert, meine IService-Registrierung erhält, ohne für jede Registrierung ein Aktivierungsereignis einzurichten? Es funktioniert gut, aber möchte nur die Registrierungen aufräumen.

Antwort

1

Verwenden Sie einfach die Konstruktorinjektion. Erstellen Konstruktor mit Parametern für Ihre Klasse wie

public DerivedClass(IServiceOne service1, IService2 service2) 
{ 
this._service1 = service1; 
this._service2 = service2; 

} 

und machen Autofac automatisch seinen Job, wie

builder.RegisterType<T>(); 
+0

Ich glaube, ich erweitern sollte. Ich habe einen Zirkelbezug, daher OnActivated. (Der Zirkelverweis macht Sinn). Ich denke, was ich meinte war, ich möchte das OnActivated auf alle Unterklassen auf BaseClass anwenden, ohne das OnActivated für jede Registrierung zu schreiben. (Der IService ist ein Singleton, der auch alle registrierten IDerivedClasses referenziert.) Es funktioniert gut mit dem OnActivated, wollte es nur aufräumen. –

+0

Eigentlich könnte ich falsch liegen, aber wenn Sie kreisförmige Abhängigkeit von Singleton haben - es ist 99,9% Wahrscheinlichkeit, dass Sie einen Fehler gemacht haben beim Entwurf dieser Komponente. Und über dein Problem, wenn es immer noch für dich ist, werde ich das in den paar Tagen sehen, die jetzt sehr beschäftigt sind – Ph0en1x

Verwandte Themen