Мне нужен PRISM EventAggregator в MarkupExtension.
Поскольку InjectionConstructor ничего не помогает, я пытался использовать InjectionProperty.Однако EventAggregator также никогда не создается.
Думаю, я выяснил причину.Класс, производный от MarkupExtension, никогда не разрешается из контейнера.Следовательно, никаких инъекций не происходит.
Я подтвердил этот вывод, используя следующий пример
public interface ITestClass
{
IEventAggregator EventAggregator { get; set; }
void DoSomething();
}
public class TestClass : ITestClass
{
[Dependency]
public IEventAggregator EventAggregator { get; set; }
public TestClass()
{
}
public void DoSomething()
{
DoSomethingElse();
}
private void DoSomethingElse()
{
var secondInstance = new TestClass();
Debugger.Break();
}
}
Регистрация в UnityContainer выглядит следующим образом
InjectionMember[] injectionMembers = new InjectionMember[]
{
new InjectionProperty( "EventAggregator", typeof(IEventAggregator) )
};
_container.RegisterType<ITestClass , TestClass>( new TransientLifetimeManager() , injectionMembers );
Для целей тестирования Iразрешите TestClass непосредственно из контейнера и вызовите DoSomething ()
var cls = _container.Resolve<ITestClass>();
cls.DoSomething();
Более тщательное рассмотрение подтверждает мое предположение. cls.EventAggregator содержит используемый объект, secondInstance.EventAggregator имеет значение null.
То же самое происходит при попытке вставить EventAggregator в MarkupExtension.XAML создает экземпляр MarkupExtension напрямую и никогда не использует UnityContainer для его разрешения.
Есть ли способ использовать EventAggregator в MarkupExtension?