我如何将所有实例注入为在 Prism 中实现通用接口的集合 IEnumerable<T>?

How can I inject all instances as collection IEnumerable<T> that implement a common interface in Prism?

我想将所有实例注入为实现通用接口的 IEnumerable<T>。它用于在策略模式解析器中使用它。我该怎么做?我用谷歌搜索了统一容器有办法。

我需要它来完成与下面 link 相同的工作。

https://ufukhaciogullari.com/blog/strategy-pattern-with-dependency-injection/

    public interface ITest
    {
        string Name { get; set; }
    }

    public class TestA : ITest
    {
        public string Name { get; set; } = "A";
    }

    public class TestB : ITest
    {
        public string Name { get; set; } = "B";
    }

    public class TestC : ITest
    {
        public string Name { get; set; } = "C";
    }

    public class SomeResolver
    {
        IEnumerable<ITest> _tests;

        public SomeResolver(IEnumerable<ITest> tests)
        {
            _tests = tests;
        }
    }

在unity中,我可以通过以下方式注册:

container.RegisterType<IEnumerable<IParserBuilder>, IParserBuilder[]>();

我尝试在 Prism 中做同样的事情,但失败了。如何在 Prism 中实现?

I tried to do the same in Prism, but it fails. How to do it in Prism?

Prism 没有依赖注入容器,它只是试图对您隐藏 IUnityContainer

也就是说,没有必要首先注册 IEnumerable<IParserBuilder>

container.Resolve<SomeResolver>()

将调用构造函数并将 TestATestBTestC 的实例传递给它,前提是您先注册了它们。

container.Register<ITest, TestA>( "A" );
container.Register<ITest, TestB>( "B" );
container.Register<ITest, TestC>( "C" );

不幸的是,没有办法让 ABC 也被注入,所以你必须保留 Name 属性如果您需要识别特定服务(不过我会将其设置为只读)。我也希望能够注入 IEnumerable<(string, ITest)> 并获取名称...