Mam usługę, która pobiera IMyDependency w swoim konstruktorze. IMyDependency, MyDependency i usługa wszystkie żyją w tym samym zespole. MyDependency ma pojedynczy, publiczny konstruktor bez parametrów.servicestack with funq - autowiring zgodnie z konwencją
Ku mojemu zaskoczeniu, to nie działa:
container.RegisterAutoWired<IMyDependency>();
To rzuca "System.NullReferenceException".
To działa, jeśli mogę to zrobić:
container.RegisterAutoWiredAs<MyDependency, IMyDependency>();
Ale potem, tak to robi:
container.RegisterAs<MyDependency, IMyDependency>();
Więc jaka jest różnica? Jeśli "automatyczne okablowanie" nie może znaleźć konkretnej implementacji i nie ma znaczenia, czy usługi wymagające zależności mogą zostać rozwiązane, to co to jest automatyczne okablowanie?
Czy funkcja Funq powinna być w stanie znaleźć konkretne wdrożenia zgodnie z konwencją? Jeśli tak, to jaka jest ta konwencja, jeśli nie ta sama nazwa?
Dzięki.
Więc jeśli dobrze rozumiem to poprawnie, to należy robić: container.RegisterAutoWired(); Jednakże, jeśli robię tylko to, w czasie wykonywania (gdy wywołuję usługę z zależnością), otrzymuję komunikat "Wymagana zależność typu IMyDependency nie może zostać rozwiązana". Wciąż nie jestem pewien co do celu tej metody, ponieważ kontener nie wydaje się w stanie znaleźć interfejsu odpowiadającego zarejestrowanemu rodzajowi betonu. –
To całkiem proste, po prostu wprowadzi to, co rejestrujesz, jeśli "Register", niż wstrzyknie wszystkie właściwości 'MyDependency'. Jeśli chcesz wprowadzić właściwości 'IMyDependency', musisz wywołać' RegisterAs '. –
mythz
W moim projekcie mam ~ 200 klas według konwencji: MyClass: IMyClass. Więc zgodnie z tym za każdym razem zaimplementować nową klasę lub usunąć może zrobić okablowanie dla niego? Unity, Windsor i StructureMap mają autowire konwencji. – nerijus