Ninject, warunkowa konfiguracja

Ninject, warunkowa konfiguracja
JP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1065
0

Siemka. Zaćmienie mam, pomóżcie.

Mam aplikację asp.net mvc dla 2 klientów i w Ninjecie ustawiam sobie binding interefejsów.
Klient 1 ma mieć implementację Klasa1 a Klient2 powinien mieć implementacje Klasa2.

Gdzie, jak, czego użyć do warunkowej konfiguracji? To nie musi być jakoś specjalnie zabezpieczone.

Na razie mam w Settings kod klienta i wg niego w if-ach binduję odpowiednie klasy ale jakoś mi się to nie podoba.

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
0

Możesz zdefiniować Conditional compilation symbols jako nazwa klienta i zastosować kompilację warunkową np:

Kopiuj
#if Klient1
	// tutaj np. definicja konstruktora z wstrzykiwaniem zależności dla Klienta 1
#endif
#if Klient2
	// to samo ale dla Klienta 2
#endif

Teraz wstawiając jako Conditional compilation symbols odpowiednio Klient1 albo Klient2 będzie Ci się w IDE z automatu zaciemniał kod, który nie zostanie wkompilowany w binarkę.

Frazy wpisuje się wewnątrz własności projektu:
screenshot-20180706140502.png

JP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1065
0

Podane rozwiązania są OK, ale ja chciałbym mieć taki sam build dla oby klientów tylko różnice w konfiguracji bo chyba łatwiej będzie to potem wdrażać. Robię build, publish na 2 serwery i potem tylko ewentualne ustawienie jakichś parametrów, żeby Ninject zbindował odpowiednie imlementacje.
Prawie cała aplikacja jest taka dla klientów tylko są drobne różnice w implementacjach niektórych interfejsów.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0
jacek.placek napisał(a):

Na razie mam w Settings kod klienta i wg niego w if-ach binduję odpowiednie klasy ale jakoś mi się to nie podoba.

Ale co Ci się nie podoba? Bo raczej ciężko wymyślić coś równie łatwego, stabilnego i skalowalnego.

JP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1065
0

OK. Dałem trochę ciała bo powinienem napisać na czym właściwy problem polega.

Mam aplikację (legacy), która jest rozwijana dla różnych klientów i chodzi mi o maksymalne uproszczenie i zautomatyzowanie deploymentu. Na razie nie chcę używać jakichś pełnych systemów CI bo na tym etapie to chyba nie jest tego warte. Wystarczy mi jak będę mógł standardowym Publishem z VS wysłać wszystko co potrzeba na serwery klientów. Tzn po jednym publishu na klienta.

No i teraz. W aplikacji są różnice, o których pisałem wcześniej a Publish wyśle mi standardowy web.config dlatego nie chciałbym w nim trzymać danych konfiguracyjnych dla Ninjecta (i kilku innych parametrów).
Próbuję teraz wrzucić jakiegoś XML-a z konfigiem do App_Data bo publish ma opcję wyłączenia publikacji tego folderu więc publikowanie kolejnych aktualizacji nie powinno zmienić danych konfiguracyjnych w tym folderze.
Tylko teraz pytanie gdzie odczytywać te dane. W Gobal.asax w Application_Start() bez sensu bo (chyba) to wymagałoby restartu aplikacji a ten jest raczej niekonieczny.
W jakimś BaseController? Gdzie indziej?

Próbowałem kiedyś Squirrel-a (w winformsowych) ale się sypało na ich własnych tutorialach.

Wspominałem, że web to nie moja bajka i stad te rozterki :/

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0
jacek.placek napisał(a):

No i teraz. W aplikacji są różnice, o których pisałem wcześniej a Publish wyśle mi standardowy web.config dlatego nie chciałbym w nim trzymać danych konfiguracyjnych dla Ninjecta (i kilku innych parametrów).

O ile wiem, to Publish pozwala na transformację web.config... https://msdn.microsoft.com/en-us/library/dd465318%28v=vs.100%29.aspx?f=255&MSPPError=-2147217396

Tylko teraz pytanie gdzie odczytywać te dane. W Gobal.asax w Application_Start() bez sensu bo (chyba) to wymagałoby restartu aplikacji a ten jest raczej niekonieczny.

I tak musisz zrestartować kontener IoC, prawda? A to się zazwyczaj robi przy starcie aplikacji, robienie tego podczas jej pracy może dać dziwne efekty.

JP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1065
0

Dzięki @somekind. Faktycznie to powinno załatwić temat. do tej pory w desktopowych nie potrzebowałem bo mi instalatory cośtam zapewniały.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.