Ho un servizio che prende un'IMyDependency nel suo costruttore. IMyDependency, MyDependency e il servizio vivono tutti nello stesso assembly. MyDependency ha un costruttore singolo, pubblico, senza parametri.servicestack con funq - autowiring per convenzione
Con mia grande sorpresa, questo non ha funzionato:
container.RegisterAutoWired<IMyDependency>();
getta un "System.NullReferenceException".
Funziona se faccio questo:
container.RegisterAutoWiredAs<MyDependency, IMyDependency>();
Ma poi, così fa questo:
container.RegisterAs<MyDependency, IMyDependency>();
Allora, qual è la differenza? Se il "cablaggio automatico" non riesce a trovare un'implementazione concreta e non fa alcuna differenza se i servizi che richiedono la dipendenza possono essere risolti, qual è il cablaggio automatico?
Funq dovrebbe essere in grado di trovare le implementazioni concrete per convenzione? In tal caso, qual è questa convenzione, se non lo stesso nome?
Grazie.
Quindi, se ho capito bene, dovrei fare: container.RegisterAutoWired(); Tuttavia, se faccio solo questo, in fase di esecuzione (quando chiamo il servizio con la dipendenza), ottengo "La dipendenza richiesta di tipo IMyDependency non può essere risolta". Quindi non sono ancora chiaro sullo scopo di questo metodo, in quanto il contenitore non sembra in grado di trovare l'interfaccia corrispondente al tipo di calcestruzzo registrato. –
È piuttosto semplice, semplicemente si inietterà ciò che si registra, se si 'Register' di quanto verrà iniettare tutte le proprietà 'MyDependency'. Se si desidera iniettare proprietà 'IMyDependency' piuttosto che chiamare' RegisterAs '. –
mythz
Nel mio progetto mi piacciono ~ 200 classi per convenzione: MyClass: IMyClass. Quindi, in base a questo ogni volta che implemento una nuova classe o rimuovo, potrei fare il cablaggio per questo? Unity, Windsor e StructureMap hanno un'autowire per convenzione. – nerijus