Pracę z kontenerem pokazano poniżej:
using (var ninjectContainer = new StandardKernel()) { ninjectContainer.Bind<IEngine>().To<GasEngine>(); var car4 = ninjectContainer.Get<AudiA4>(); car4.Run(); }
Podobnie jak w większości przypadków nie musimy rejestrować wszystkich typów (tych, o które nie prosimy przez interfejs). Poniżej kilka innych ciekawych funkcjonalności:
public class AudiA4Module : NinjectModule { public override void Load() { Kernel.Bind<IEngine>().To<DieselEngine>().InSingletonScope(); Kernel.Rebind<IEngine>() .ToMethod(context => { var rnd = new Random(); var num = rnd.Next()%2; if (num == 1) return new GasEngine(); else return new DieselEngine(); }); } }
using (var ninjectContainer = new StandardKernel(new AudiA4Module())) { var car5 = ninjectContainer.Get<AudiA4>(); car5.Run(); }
Moduły wspierają separację kodu konfigurującego. Nie musimy bindować koniecznie do typu, możemy dokonać bindingu do metody, gdzie wykonujemy jakąś logikę. Ponadto warto pamiętać, że domyślnie zwrócony zostanie zawsze nowy obiekt. Możemy to zmienić, wywołując na przykład metodę InSingletonScope (dla singletonów). Co więcej binding można odwołać metodą Rebind.
Brak komentarzy:
Prześlij komentarz