我如何将所有实例作为集合IEnumarable 在Prism中实现公共接口?

问题描述 投票:0回答:1

我想将所有实例注入为IEnumarable实例,以实现一个公共接口。用于在策略模式解析器中使用它。我该怎么做?我用谷歌搜索了统一容器的方法。

我需要执行此操作以完成下面的链接。

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;
        }
    }

团结一致,我可以注册以下方式:

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

我试图在Prism中做同样的事情,但是失败了。在棱镜中如何做?

prism
1个回答
0
投票

我试图在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)>并获得名称...

© www.soinside.com 2019 - 2024. All rights reserved.