У меня есть сторонняя библиотека, возвращающая класс instace. Это из моего cotrol, но я хочу использовать Unity
для inyect в его публичных объектах. Поскольку я не могу добавить DependecyAttribute
к своим свойствам, потому что класс не является частичным и не наследуется, мне интересно, могу ли я использовать конфигурацию XML Unity
, чтобы сделать inyection.Unity BuildUp without DependencyAttribute
Возможно ли использовать конфигурацию конфигурации Unity's
для настройки зависимостей наращивания? Если да, то да. Как настроить XML для этого?
Я пробовал:
<register type="IService" mapTo="Service"> <!--Service has public constructor-->
</register>
<!--ThirdPartyObj has no interface and no public constructor-->
<register type="ThirdPartyObj " mapTo="ThirdPartyObj">
<!-- Inject the property "Service" -->
<property name="Service" /> //type of the property is IService
</register>
Эта конфигурация будет работать, если Unity Resolve
ThidPartyObj
купить не работает в BuilUp
(Null ссылки в собственности Service) и не Resolve
ThirdPartyObj
, потому что не имеет открытый конструктор может.
Простой пример того, что я хочу АРХИВ:
IUnityContainer uc = New UnityContainer() //create container
container.LoadConfiguration() // load from XML config
ThirdPartyObj foo = ThirdPartyLibrary.getFooInstace() //get third party instance
container.BuildUp(foo.getType, foo) //inyect dependencies
Console.WriteLine(foo.Service.getServiceMessage)
Спасибо Tuzo! По крайней мере, у меня есть подтверждение, что я в правильном направлении. Должно быть, что-то не так хорошо confgiured, потому что я пытаюсь ваш пример и foo.Service является Null в моем отладчике. Это странно. Дайте мне некоторое время зашифровать ошибки в моей конфигурации, прежде чем я приму свой ответ. – jlvaquero
Я только что создал новый проект, скопировавший мой код, и моя конфигурация и все в порядке. – jlvaquero