我如何将所有实例注入为在 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>()
将调用构造函数并将 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)>
并获取名称...
我想将所有实例注入为实现通用接口的 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>()
将调用构造函数并将 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)>
并获取名称...