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.

questionAnswers(5)

yourAnswerToTheQuestion