Я пытаюсь заставить 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
. Однако я хочу знать, что для этого интерфейса нужны определенные параметры инициализации одного времени. Есть ли способ каким-то образом аннотировать (атрибуты?) Интерфейс с этой информацией и передавать их в фреймворк при создании объекта?
Изменить: описал интерфейс немного больше.