Я пытаюсь заставить Unity управлять созданием моих объектов, и я хочу иметь некоторые параметры инициализации, которые не известны до времени выполнения:
На данный момент единственный способ, которым я мог придумать, как это сделать - это использовать метод Init на интерфейсе.
interface IMyIntf {
void Initialize(string runTimeParam);
string RunTimeParam { get; }
}
Затем, чтобы использовать его (в Unity), я бы сделал это:
var IMyIntf = unityContainer.Resolve<IMyIntf>();
IMyIntf.Initialize("somevalue");
В этом сценарии runTimeParam
параметр определяется во время выполнения на основе пользовательского ввода. Тривиальный случай здесь просто возвращает значение, runTimeParam
но в действительности параметр будет выглядеть как имя файла, а метод initialize будет что-то делать с файлом.
Это создает ряд проблем, а именно то, что Initialize
метод доступен на интерфейсе и может вызываться несколько раз. Установка флага в реализации и создание исключения при повторном вызове Initialize
кажется неуклюжим.
В тот момент, когда я разрешаю свой интерфейс, я не хочу ничего знать о реализации IMyIntf
. Однако я хочу знать, что этот интерфейс требует определенных параметров инициализации. Есть ли способ как-то аннотировать (атрибуты?) Интерфейс этой информацией и передавать их в каркас при создании объекта?
Редактировать: описал интерфейс немного подробнее.
runTimeParam
это зависимость, которая определяется во время выполнения на основе пользовательского ввода. Должна ли альтернатива для этого делиться на два интерфейса - один для инициализации, а другой для хранения значений?