c# – 使用StructureMap的数组构造函数依赖项
发布时间:2020-12-16 01:33:01 所属栏目:百科 来源:网络整理
导读:我在TaskRegistry中定义了一些ITask混凝土类型: public class TaskResigstry : Registry{ public TaskResigstry() { ForRequestedTypeIBootstrapperTask().TheDefaultIsConcreteTypeStartTasks(); ForRequestedTypeITask().TheDefaultIsConcreteTypeFirstTa
我在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注入ITask []构造函数参数? 谢谢. 解决方法
如果你想注入一个数组,那么在流畅的界面中有一个方法…
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方法访问所有已注册的类型,但我觉得我可能会走错路. 我很乐意纠正这个更容易:). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |