/ / Unity fałszywe rozwiązanie, aby zminimalizować koszt inicjalizacji obiektu - c #, .net, unity-container, prism

Manekin Unity rozwiązany, aby zminimalizować koszt inicjalizacji obiektu - c #, .net, unity-container, prism

Mam komponent, którego wykonanie zajmuje konstruktor (używa SAPBOBSdll do połączenia z bazą danych SAP Business One) w mojej aplikacji Prism. Rejestruję to w kontenerze Unity:

_container.RegisterType<IConnection, Connection>(new ContainerControlledLifetimeManager());

Kiedy próbuję rozwiązać ten komponent, zajmujedługi czas (około 15 sekund). Czy to zła praktyka, aby wstępnie rozwiązać komponent przy użyciu innego wątku, aby nie blokował mojego programu, gdy próbuję go użyć? Robię to zaraz po linii rejestru i działa dobrze, ale mam co do tego dziwne przeczucie.

new Task(()=> _container.Resolve<IConnection>()).Start();

Czy mogę to zrobić, czy powinienem zrobić to w inny sposób?

Odpowiedzi:

2 dla odpowiedzi № 1

Twoje sugerowane rozwiązanie brzmi dla mnie dobrze, zwłaszcza jeśli umieścisz ten kod w metodzie Initialize () modułu i upewnisz się, że moduł jest ładowany, gdy jest dostępny (w przeciwieństwie do na żądanie).

Może aby uczynić to, co robisz, bardziej czytelnym dla innych czytelników kodu, napisałbym coś w następujący sposób:

new Task(()=> _container.RegisterInstance<IConnection>(_container.Resolve<Connnection>())).Start();

To wyjaśnia czytelnikowi, że rozwiązujesz jawnie, aby zarejestrować tę instancję jako singleton dla przyszłych rozwiązań tego typu.