Czy istnieje wzorzec do inicjowania obiektów utworzonych za pomocą kontenera DI
Próbuję nakłonić Unity do zarządzania tworzeniem moich obiektów i chcę mieć pewne parametry inicjalizacji, które nie są znane do czasu uruchomienia:
W tej chwili jedyny sposób, w jaki mogłem wymyślić sposób na to, to mieć metodę Init na interfejsie.
interface IMyIntf {
void Initialize(string runTimeParam);
string RunTimeParam { get; }
}
Następnie, aby go użyć (w Jedności), zrobiłbym to:
var IMyIntf = unityContainer.Resolve<IMyIntf>();
IMyIntf.Initialize("somevalue");
W tym scenariuszurunTimeParam
parametr jest określany w czasie wykonywania na podstawie danych wprowadzonych przez użytkownika. Trywialny przypadek tutaj po prostu zwraca wartośćrunTimeParam
ale w rzeczywistości parametr będzie taki jak nazwa pliku, a metoda zainicjowania zrobi coś z plikiem.
Stwarza to szereg problemów, a mianowicie, żeInitialize
metoda jest dostępna w interfejsie i może być wywoływana wiele razy. Ustawienie flagi w implementacji i wyjątek przy ponownym wywołaniuInitialize
wydaje się niezgrabny.
W momencie, w którym rozwiązuję mój interfejs, nie chcę wiedzieć nic o implementacjiIMyIntf
. Chcę jednak wiedzieć, że ten interfejs wymaga pewnych jednorazowych parametrów inicjalizacji. Czy istnieje sposób, aby w jakiś sposób opisać (atrybuty?) Interfejs z tymi informacjami i przekazać je do ram podczas tworzenia obiektu?
Edytuj: opisałem interfejs nieco bardziej.