所以,我创建了一个类,它在我的项目中找到实现某个接口的所有类,然后生成这些类的实例,然后聚合从该接口的契约提供的方法的结果。
这是我的代码
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(); }
所有Constructors Activator的签名应该构建
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)
另外两个使用无参数构造函数。
知道为什么这不起作用吗?
答案 0 :(得分:0)
通过调用Activator.CreateInstance
来传递Ninject,就像使用new运算符一样。您有责任自己提供任何依赖。
改为呼叫kernel.Get(tokernReplacer)
。