因此,我创建了一个类,它在我的项目中查找实现某个接口的所有类,生成这些类的实例,然后聚合从该接口的契约提供的方法的结果。
这是我的代码
public string Parse(string src,JToken json)
{
var type = typeof(IReplaceTokens);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(t => type.IsAssignableFrom(t) && t.IsClass);
return types.Select(tokenReplacer => Activator.CreateInstance(tokenReplacer) as IReplaceTokens)
.Aggregate(src, (current, tokenReplacerInstance) => tokenReplacerInstance.ReplaceTokens(current, json));
}
我从 activator 获取 MissingMethod 异常方法,因为它找不到无参数构造函数,但是这些类型的构造函数所需的两个参数应该由 Ninject 在绑定时注入。
从我的 NinjectModule
Bind<IConfigReader>().To<JsonConfigReader>()
.InSingletonScope()
.WithConstructorArgument("appId", _appId)
.WithConstructorArgument("type", _type);
var configReader = this.KernelInstance.GetService(typeof (IConfigReader)) as IConfigReader;
if (configReader == null || configReader.JsonWrappedInExercise) { Bind<IJsonExtractor>().To<Pm3JsonExtractor>().InSingletonScope(); }
else { Bind<IJsonExtractor>().To<NakedJsonExtractor>().InSingletonScope(); }
所有构造函数激活器的签名都应该构造
public MonthTokenReplacer(IJsonExtractor extractor, IConfigReader reader)
public DateTokenReplacer(IJsonExtractor extractor, IConfigReader reader)
public LastNameTokenReplacer(IJsonExtractor extractor, IConfigReader reader) : base(extractor, "[[LastName]]", reader.FirstNameField) { }
public TokenReplacerBase(IJsonExtractor extractor, string token,string objectKey)
加上另外两个带有无参数构造函数的。
知道为什么这不起作用吗?