Witam, czy można utworzyć jedna instancje jakiegoś obiektu w jednym miejscu tak żeby można było użyć tego obiektu w każdym innym windows formie. Mam klasę SQL serwer i chciałbym żeby obiekt utworzony raz w projekcie był dostępny w innych komponentach.
Mozna to osiagnac miedzy innymi stosujac wzorzec singleton aczkolwiek nie jest to najlepsze rozwiazanie bo utrudnia testowanie aplikacji.
Mozna tez uzyc jakiegos kontenera DI (np. ninject) do wstrzykiwania zaleznosci i wtedy dla takiej klasy mozna ustawic scope na singleton przy bindowaniu i kontener sam zadba o to zeby za kazdym razem byl zwracana ten sam obiekt.
Możesz coś więcej napisać o drugim sposobie? Ja zawsze stosuję singletony w takich przypadkach i jest ok. Nie utrudniają mi też testowania. Ale chciałbym przy okazji poznać alternatywę.
Wszystko zależy co trzymasz w tym singletonie.
Moim zdaniem utrudnia testowanie ponieważ każdy unit tests powinien być niezależny a tu nagle pojawia się zasób który jest współdzielony pomiędzy wszystkie testy jednostkowe.
Oczywiście można to jakoś objeść poprzez czyszczenie i ustawianie obiektu "singletona" ale to nie jest zalecana metoda.
Jak to zrobic przy uzyciu ninjecta jest opisane tutaj: https://github.com/ninject/ninject/wiki/Object-Scopes
Strzelam, ze inne kontenery DI maja podobne mozliwosci.