そのため、特定のインターフェイスを実装するプロジェクト内のすべてのクラスを検索し、それらのクラスのインスタンスを生成し、そのインターフェイスのコントラクトから提供されるメソッドの結果を集約するクラスを作成しました。
これが私のコードです
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 例外メソッドを取得していますが、これらの型のコンストラクタに必要な 2 つのパラメータは、バインドされているときに 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)
さらに、パラメーターなしのコンストラクターを持つ他の 2 つ。
なぜこれが機能しないのか考えていますか?