gpt4 book ai didi

c# - 如何在 StructureMap 中动态创建对象的实例?

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:27 24 4
gpt4 key购买 nike

我有一个名为“ImportRunner”的抽象类。

我有一个名为“ScorecardRunner”的类的实现。

当我从 XML 文件中将对象类型作为字符串拉回并且它可以是 ImportRunner 的任何实现时,我如何在运行时获取 ScorecardRunner 等类的实例?

我目前的代码如下。

var importer = container.GetInstance<ImportRunner>();

当我尝试执行如下所示的操作时,出现编译错误。

var importer = container.GetInstance<Type.GetType("Importer.ScorecardRunner")>();

Operator '<' cannot be applied to operands of type 'method group' and 'Type'

谢谢,汤姆

最佳答案

与其分散基于运行时值创建实例的逻辑并将其硬塞到 StructureMap 的注册表中,更好的方法是简单地创建一个工厂,负责确定正确的运行器实例并将其注入(inject)。

例如:

public class XmlReader
{
public bool IsScoreCard { get; set; }
}

public abstract class ImportRunner
{
}

public class ScorecardRunner : ImportRunner
{
}

public class DefaultRunner : ImportRunner
{
}

public class RunnerFactory
{
private readonly XmlReader _reader;

public RunnerFactory(XmlReader reader)
{
_reader = reader;
}

public ImportRunner Resolve()
{
if (_reader.IsScoreCard)
return new ScorecardRunner();

return new DefaultRunner();
}
}

然后在注册表中像这样配置它:

this.For<ImportRunner>().Use(ctx => ctx.GetInstance<RunnerFactory>().Resolve());

关于c# - 如何在 StructureMap 中动态创建对象的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37254989/

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