gpt4 book ai didi

c# - 数组构造函数与 StructureMap 的依赖关系

转载 作者:行者123 更新时间:2023-11-30 14:20:09 25 4
gpt4 key购买 nike

我在 TaskRegistry 中定义了一些 ITask 具体类型:

public class TaskResigstry : Registry
{
public TaskResigstry()
{
ForRequestedType<IBootstrapperTask>().TheDefaultIsConcreteType<StartTasks>();

ForRequestedType<ITask>().TheDefaultIsConcreteType<FirstTask>();
ForRequestedType<ITask>().AddConcreteType<SecondTask>();
ForRequestedType<ITask>().AddConcreteType<ThirdTask>();
}
}

还有我的StartTasks

public class StartTasks : IBootstrapperTask
{
public StartTasks(ITask[] tasks)
{
foreach(var task in tasks)
{
task.Run();
}
}
}

如何使用 StructureMap 注入(inject) ITask[] 构造函数参数?

谢谢。

最佳答案

如果你想注入(inject)一个数组,在流畅的界面中有一个方法......

ForRequestedType<IBootStrapperTask>().TheDefault.Is.OfConcreteType<StartTasks>()
.TheArrayOf<ITask>().Contains(
y => {
y.OfConcreteType<Task1>();
y.OfConcreteType<Task2>();
y.OfConcreteType<Task3>();
});

如果您想走接受 IEnumerable<T> 的路线据我所知,在你的构造函数中,事情开始变得有点复杂。您可以像这样指定和构建构造函数参数:-

ForRequestedType<IBootStrapperTask>().TheDefault.Is.OfConcreteType<StartTasks>()
.CtorDependency<IEnumerable<ITask>>().Is(i => {
i.Is.ConstructedBy(c => {
return new List<ITask> {
c.GetInstance<Task1>(),
c.GetInstance<Task2>(),
c.GetInstance<Task3>()
};
});
});

如果您想要所有已注册的类型,您可以制作一个自定义 IBuildInterceptor,它通过 BuildSession 上的 CreateInstanceArray 方法访问所有已注册的类型,但我觉得我可能走错了路。

我很乐意得到纠正,这要容易得多:)。

关于c# - 数组构造函数与 StructureMap 的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1657705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com