我需要MarkupExtension中的PRISM EventAggregator。
因为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 );
出于测试目的,我直接从容器中解析TestClass并调用 DoSomething()
var cls = _container.Resolve<ITestClass>();
cls.DoSomething();
仔细观察即可证实我的假设。 cls.EventAggregator 包含一个可用的对象, secondInstance.EventAggregator 为空。
尝试将EventAggregator注入MarkupExtension时也会发生同样的情况。 XAML直接实例化MarkupExtension,从不使用UnityContainer对其进行解析。
有什么方法可以在MarkupExtension中使用EventAggregator?