Próbuję zmusić Unity do zarządzania tworzeniem moich obiektów i chcę mieć pewne parametry inicjalizacji, które nie są znane do czasu wykonania:
W tej chwili jedynym sposobem, w jaki mogłem wymyślić, jak to zrobić, jest posiadanie metody Init w interfejsie.
interface IMyIntf {
void Initialize(string runTimeParam);
string RunTimeParam { get; }
}
Następnie, aby go użyć (w Unity), zrobiłbym to:
var IMyIntf = unityContainer.Resolve<IMyIntf>();
IMyIntf.Initialize("somevalue");
W tym scenariuszu runTimeParam
parametr jest określany w czasie wykonywania na podstawie danych wejściowych użytkownika. Ten trywialny przypadek po prostu zwraca wartość, runTimeParam
ale w rzeczywistości parametr będzie czymś w rodzaju nazwy pliku, a metoda initialize zrobi coś z plikiem.
Stwarza to szereg problemów, a mianowicie to, że Initialize
metoda jest dostępna w interfejsie i można ją wywołać wiele razy. Ustawienie flagi w implementacji i wyrzucenie wyjątku przy powtarzającym się wywołaniu Initialize
wydaje się być niezgrabne.
W momencie, w którym rozwiązuję mój interfejs, nie chcę nic wiedzieć o implementacji IMyIntf
. Chcę jednak wiedzieć, że ten interfejs wymaga pewnych jednorazowych parametrów inicjalizacyjnych. Czy istnieje sposób, aby w jakiś sposób dodać adnotacje (atrybuty?) Do interfejsu tymi informacjami i przekazać je do frameworka podczas tworzenia obiektu?
Edycja: nieco bardziej opisałem interfejs.
runTimeParam
jest zależnością określaną w czasie wykonywania na podstawie danych wejściowych użytkownika. Czy alternatywą powinno być podzielenie go na dwa interfejsy - jeden do inicjalizacji, a drugi do przechowywania wartości?