我有一个名为“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());
我是一名优秀的程序员,十分优秀!