我想将所有实例注入为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中做同样的事情,但是失败了。在棱镜中如何做?
Prism的无依赖项注入容器,它只是试图向您隐藏IUnityContainer
。
话虽如此,没有必要先注册IEnumerable<IParserBuilder>
。
container.Resolve<SomeResolver>()
将调用构造函数,并将TestA
,TestB
和TestC
的实例传递给它,前提是您先注册了它们。
container.Register<ITest, TestA>( "A" );
container.Register<ITest, TestB>( "B" );
container.Register<ITest, TestC>( "C" );
[不幸的是,也没有办法注入这些A
,B
和C
,因此,如果需要标识特定的服务,则必须保留Name
属性(我会读-不过)。我也希望能够注入IEnumerable<(string, ITest)>
并获得名称...