2012-05-30 6 views
18

Używam załączonego obrazu, aby wyjaśnić, co miałem na myśli.NInject: jak przekazywać parametry, gdy uzyskasz <T>()?

  • Mam kilka klas zarządzanych przez NInject. Niektóre z nich mają kilka pojedynczych instancji, a inne mają zakres przejściowy. Na obrazku niebieskie prostokąty są singltonami, czerwone są przejściowe. Procesor zależy od innych klas lub instancji.

  • Chcę pobrać instancję procesora za każdym razem, używając pliku kernel.Get. Jednak za każdym razem chcę używać różnych wartości dla obiektów używanych przez procesor. Zobacz Action1 i Action2 na obrazie. Kod nie jest prawdziwy, ale tylko dla wyjaśnienia tutaj.

Czy istnieje sposób, który może spełnić moje potrzeby? Pass parameters when Get

Odpowiedz

29

Powinieneś być w stanie przekazać argumenty konstruktora, biorąc pod uwagę, że twój Procesor bierze te zależności jako argumenty w konstruktorze.

var foo = new Ninject.Parameters.ConstructorArgument("foo", new Foo()); 
var bar = new Ninject.Parameters.ConstructorArgument("bar", new Bar()); 
var processor = kernel.Get<IProcessor>(foo, bar); 

public Processor (Foo foo, Bar bar){ 
    this.foo = foo; 
    this.bar = bar; 
} 
+1

Dziękuję za odpowiedź. Uważam jednak, że źle zrozumiałeś moje pytanie. Nie chodzi o zmianę wiązania w fazie wiązania, ale o przekazywanie parametrów w fazie rozwiązywania. Chodzi mi o to, kiedy próbuję uzyskać instancję IProcessora, jak przekazać wartości do zależności procesora: instancje Foo i Bar. Wykresy obiektów w obu akcjach są takie same, ale właściwości każdej instancji będą miały różne wartości. – Zach

+1

@Zach Przepraszamy, źle zrozumiałem twoje pytanie. Edytowałem moją pierwszą odpowiedź. –

1

pomocą funkcji OnActivation() może zaczepić zdarzenia, gdy zależność jest aktywowany.

Powiązane problemy