В настоящее время я просматриваю блок приложений Microsoft Unity, чтобы использовать его в одном из моих личных проектов. Я прочитал несколько статей и руководств об этом, но у меня есть вопрос об этом.Создание объекта с использованием Unity Application Block
В this example about the framework они используют Unity для создания объекта, который наследует интерфейс IVehicle
. Те 3 класса, которые наследуют от него, не имеют никаких свойств, которые должны быть инициализированы в конструкторе, поэтому все работает хорошо.
Очевидно, что в моем проекте это не всегда так. У меня будут некоторые классы, для которых требуется инициализация свойства (или поля) в конструкторе. Мой вопрос: как мне это достичь? Или это то, что Единство не может сделать само по себе; Мне нужно было бы создать объект, используя функцию Unity Resolve()
, которая предоставила бы мне объект с неинициализированными полями/свойствами, а затем мне пришлось бы вызывать сеттер один за другим по каждому полю/свойствам?
Ваш ответ помог мне лучше понять. Но что произойдет, если, скажем, «Engine» необходимо «Сообщение», которое я мог бы предоставить позже, во время разрешения, и я не знал этого «Message» в регистре времени в начале моего приложения? Единство кажется очень ограниченным для меня тем, что вы должны предоставить все параметры конструкторам, всем свойствам и т. Д. В самом начале вашего приложения, когда вы регистрируете свои объекты. Разве я что-то не хватает? – Choub890
Вы также можете зарегистрировать тип, используя лямбду, которая будет выполнена во время выполнения. Если этого недостаточно, вы можете создать абстрактный заводский интерфейс, например 'ICarFactory', чтобы какой-то класс мог зависеть от этой фабрики и называть что-то вроде carFactory.CreateCar() вместо того, чтобы напрямую зависеть от' ICar' –
Можете ли вы привести пример, используя Единство с выражением лямбда для регистрации типа в вашем ответе выше? Или указать мне на документацию? – Choub890