Ich habe einen Dienst, der eine IMyDependency in seinem Konstruktor nimmt. IMyDependency, MyDependency und der Dienst befinden sich alle in derselben Assembly. MyDependency hat einen einzelnen, öffentlichen, parameterlosen Konstruktor.Servicestack mit Funq - Autowiring per Konvention
Zu meiner Überraschung, das hat nicht funktioniert:
container.RegisterAutoWired<IMyDependency>();
Es wirft einen "System.NullReferenceException".
Es funktioniert, wenn ich dies tun:
container.RegisterAutoWiredAs<MyDependency, IMyDependency>();
Aber dann, so tut dies:
container.RegisterAs<MyDependency, IMyDependency>();
Also, was ist der Unterschied? Wenn 'automatische Verdrahtung' keine konkrete Implementierung finden kann und es keinen Unterschied macht, ob Dienste, die die Abhängigkeit erfordern, gelöst werden können, was ist dann eine automatische Verdrahtung?
Soll Funq Ihre konkreten Implementierungen per Konvention finden können? Wenn ja, was ist diese Konvention, wenn nicht gleich genannt?
Danke.
Also, wenn ich das richtig verstehe, soll ich tun: container.RegisterAutoWired(); Wenn ich dies jedoch nur zur Laufzeit (wenn ich den Dienst mit der Abhängigkeit aufrufen), bekomme ich "Erforderliche Abhängigkeit vom Typ IMyDependency konnte nicht aufgelöst werden". Daher ist mir der Zweck dieser Methode noch unklar, da der Container nicht in der Lage ist, die Schnittstelle zu finden, die dem registrierten Betontyp entspricht. –
Es ist ziemlich einfach, es wird einfach injizieren, was Sie registrieren, wenn Sie 'MyDependency>' registrieren, dann wird es alle 'MyDependency'-Eigenschaften injizieren. Wenn Sie möchten, dass IMyDependency-Eigenschaften injiziert werden, müssen Sie 'RegisterAs' aufrufen. –
mythz
In meinem Projekt habe ich ~ 200 Klassen nach Konvention: MyClass: IMyClass. Also entsprechend jedes Mal, wenn ich neue Klasse implementieren oder entfernen könnte Verkabelung für sie tun? Unity, Windsor und StructureMap haben eine Autowire-Konvention. – nerijus