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