我有一个名为“ ImportRunner”的抽象类。
我有一个名为“ ScorecardRunner”的类的实现。
当我从XML文件中将对象类型以字符串形式拉回并且可以是ImportRunner的任何实现时,如何在运行时获取诸如ScorecardRunner之类的类的实例?
我当前的代码如下。
var importer = container.GetInstance<ImportRunner>();
当我尝试执行以下操作时,出现编译错误。
var importer = container.GetInstance<Type.GetType("Importer.ScorecardRunner")>();
运算符“ <”不能应用于类型“方法组”和“类型”的操作数
谢谢汤姆
更好的方法是简单地创建一个负责确定正确的运行器实例并将其注入的工厂,而不是散布用于基于运行时值创建实例并将其拖入StructureMap注册表中的逻辑。
例如:
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());
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句