Unity DI注入MarkupExtension

时间:2018-10-22 07:21:33

标签: c# dependency-injection markup-extensions

我需要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?

0 个答案:

没有答案