데이터 파일 패키지의 준비, 유효성 검사 및 정리 루틴을 조정하는 클래스가 있습니다. 나는 IoC 컨테이너 (이 경우 Ninject)를 사용할 때 올바른 패턴을 찾기 위해 고심하고있다. 제가 실행하고있는 문제는 패키지에서 제공되는 것에 따라 여러 유효성 검사 클래스 중 하나를 사용할 수 있다는 것입니다.IoC 컨테이너를 사용하여 런타임에 중첩 된 종속성 해결 패턴
public class PackageProcessor
{
private readonly ILog log;
public PackageProcessor(ILog log)
{
this.log = log;
}
public void Process(CustomerProfile profile, PackageType type, string path, bool validateOnly = false, bool offlineValidation = false)
{
// ...
// Uncompress package files (if compressed) or copy raw files to woroking folder
// Ensure working folder contains the required files for the package type
// Validate package data
foreach (var packageFile in packageConfiguration)
{
var timer = Stopwatch.StartNew();
var recordCount = 0UL;
var validator = DependencyResolver.Kernel.Get<RecordValidator>(metadata =>
metadata.Has("file") &&
String.Equals(metadata.Get<string>("file"), packageFile.Name, StringComparison.OrdinalIgnoreCase));
using (var reader = new CsvReader(new StreamReader(Path.Combine(workingFolder.FullName, packageFile.Name)), false))
{
while (reader.ReadNextRecord())
{
var recordResult = validator.IsValid(reader);
if(!recordResult.IsValid)
{
// LOG: record error messages
// Mark the job as failed
}
recordCount++;
}
}
// LOG: File appears to be valid. {0} records were found.
// LOG: File contains invalid records. {0} records were found, {1} were invalid.
timer.Stop();
log.Info(m => m(Strings.RecordsProcessed, recordCount, timer.Elapsed, (recordCount/timer.Elapsed.TotalSeconds)));
}
// Clean and output the data
}
}
당신은 내가 프로세스의 일부로서 동적으로 검증 클래스를 해결해야 할 필요가 볼 수 있듯이 : 여기에 무슨 일이 일어나고 있는지의 거친 좋습니다. 과거에는 적절한 유효성 검사기를 찾고 반환하는 Factory 클래스를 만들었을 것입니다. 나는 생성자를 통해 해당 팩토리를 주입하는쪽으로 기울어 져 있지만 IoC 컨테이너 참조를 전달하지 않고 중첩 된 종속성 해결을 처리 할 때 발생할 수있는 더 나은 접근 방법이 있는지 알아보기 위해이를 배치하고자했습니다.
은 ( a duplicate question가있을 수 있습니다,하지만, 난 여전히 우리가 같은 일을 요청하는 경우를 통해 해결하려고 노력하고있어) 유효성 검사기와 프로세서가 나는 완전히 다른 접근 방식을 취할 것 재사용이 있다고 가정
주입 된 추상 팩토리는 다음과 같은 방법으로 사용됩니다. http://stackoverflow.com/questions/1943576/is-there-a-pattern-for-initializing-objects-created-via-a-di-container/1945023 # 1945023 –