gpt4 book ai didi

c# - 结构图,采用插件列表的构造函数

转载 作者:可可西里 更新时间:2023-11-01 08:16:21 27 4
gpt4 key购买 nike

我有一个这样的界面

public interface IWriter
{
...
}

和一个类

public class WriterMerger
{
public WriterMerger(IEnumerable<IWriter> writers)
...
}

我希望 structuremap 用所有已注册的 IWriter 填充 WriterMerger 上的构造函数参数。我注册了不同的作者

StructureMap.ObjectFactory.Initialize(x =>
{
x.ForRequestedType<IWriter>().AddConcreteType<MemoryWriter>();
x.ForRequestedType<IWriter>().AddConcreteType<FlatFileWriter>();
x.ForRequestedType<IWriter>().AddConcreteType<DbWriter>();
}

无论如何调用

ObjectFactory.CreateInstance<WriterMerger>();

返回异常“没有为 PluginFamily System.Collections.Generic.IEnumerable`1[[IWriter..]] 定义默认实例”(已编辑类名)

自动执行此操作有什么技巧吗?还是我必须制作自定义工厂方法?

最佳答案

实际上这可以在不更改构造函数的情况下完成

将您的容器配置更改为:

StructureMap.ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.AddAllTypesOf<IWriter>();
});
x.ForRequestedType<IEnumerable<IWriter>>()
.TheDefault.Is.ConstructedBy(x => ObjectFactory.GetAllInstances<IWriter>());
});

关于c# - 结构图,采用插件列表的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1437902/

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