인터페이스가 있으므로 IConfig라고 부르 자. 다음으로 클래스 러너가 있습니다. Runner는 생성자에서 IConfig와 다른 매개 변수를 사용합니다.작업 및 Ninject를 사용하여 병렬 처리
하지만 ActivationException이 발생하여 둘 이상의 IConfig 인스턴스가 각각 실행을 정의 할 때 주자를 GetAll 할 수 없습니다. "두 개 이상의 일치하는 바인딩을 사용할 수 있습니다."
이것이 표준 커널이 작동하는 방식이 아니기 때문에 이것이라고 생각합니다. 내가 원하는 것은 커널이 바인딩 된 각 IConfig에 대해 Runner의 새로운 인스턴스를 생성하는 것입니다.
수동으로 인스턴스를 만들지 않고도 ninject를 사용하여이 작업을 수행 할 수 있습니까? 내가 원하는 것을
예제 코드 : 내가 대신해야 할 일의
Task.WaitAll(kernel.GetAll<IRunner>().Select(r => Task.Run((Action)r.Run)).ToArray());
예제 코드 : 이와 같은 시나리오에 대한 기본 지원에는 밖으로이 없습니다
IControl control = kernel.Get<IControl>();
Task[] runners = kernel.GetAll<IConfig>()
.Select(c => new Runner(kernel.Get<IService1>(), kernel.Get<IService2>(), c, control))
.Select(r => Task.Run((Action)r.Run))
.ToArray();
Task.WaitAll(runners);
유망 해 보입니다. 조금^_^ 과 관련하여 IConfig 개체가 App.config의 foreach 변환 문자열을 사용하여 추가됩니다. foreach (Config.select (JSON)의 IConfig c) 바인딩 () .ToConstant (c); 더 좋은 방법이 있습니까? 위의 Config 속성은 Properties.Settings.Default에 대한 래퍼 일뿐입니다 ... –
IConfig 바인딩을 전혀 고려하지 않아야합니다. 대신'IConfigReader'를'IEnumerable ReadConfig()'메소드로 바인딩하십시오. –
BatteryBackupUnit
IConfigReader 접근법과 함께 솔루션 1을 시도한 후 configs.Select (factory.Create) .ToList()를 호출 할 때 IConfig를 활성화하는 중 오류가 발생합니다. –