Я намагаюся змусити Unity керувати створенням моїх об'єктів, і я хочу мати параметри ініціалізації, які не відомі до часу виконання:
На даний момент єдиний спосіб, коли я міг би придумати спосіб, як це зробити, це мати метод Init в інтерфейсі.
interface IMyIntf {
void Initialize(string runTimeParam);
string RunTimeParam { get; }
}
Тоді для його використання (в Єдності) я би зробив це:
var IMyIntf = unityContainer.Resolve<IMyIntf>();
IMyIntf.Initialize("somevalue");
У цьому сценарії runTimeParam
параметр визначається під час виконання на основі введення користувача. Тривіальний випадок тут просто повертає значення, runTimeParam
але насправді параметр буде чимось на зразок імені файлу, і метод ініціалізації буде щось робити з файлом.
Це створює ряд питань, а саме те, що Initialize
метод доступний в інтерфейсі і його можна викликати кілька разів. Встановлення прапора в реалізації та викидання виключення при повторному виклику Initialize
здається способом незграбним.
У той момент, коли я вирішую свій інтерфейс, я не хочу нічого знати про реалізацію IMyIntf
. Однак я хочу знати, що цей інтерфейс потребує певних параметрів одноразової ініціалізації. Чи є спосіб якось анотувати (атрибути?) Інтерфейс з цією інформацією та передати їх у рамки, коли об’єкт створений?
Редагувати: Описаний інтерфейс трохи більше.
runTimeParam
- це залежність, яка визначається під час виконання на основі даних користувача. Чи варто альтернативу цьому розділити його на два інтерфейси - один для ініціалізації та інший для зберігання значень?