DI에서 클래스를 구현하려고하지만 디자인이 적절하지 않을 수 있습니다.특정 상황에서 DI 구현
난 그냥이 상황에서 DI를 구현할 수있는 방법을하지 않는
public partial class Doer
{
private static readonly DoerRepository repository = new DoerRepository();
public static IEnumerable<Doer> GetActiveDoers()
{
return repository.Doers.Where(c => c.Person.IsActive);
}
}
내가
class DoerValidation
{
public DoerValidation()
{
compileData();
}
private void compileData()
{
doersActive = Doer.GetActiveDoers();
//...
}
}
에 DI를 추가 할 클래스 그리고 내 Doer
클래스의와 관계있는 코드입니다. 어쩌면 GetActiveDoers
방법이 나쁜 디자인입니까? 그렇지 않으면이 방법을 어디에 두겠습니까?
리포지토리에 직접 새 메서드를 추가하는 것이 좋습니다. 어떤 사람들은 단지 구현 있도록 청결 유지해야 하더군요이
당신은 기본적으로DoerRepository
DoerValidation
에 주입해야 할 것 소리
public interface IDoerRepository
{
IQueryable<Doer> Doers { get; }
void SaveDoer(Doer doer);
void DeleteDoer(Doer doer);
}
도움 주셔서 감사합니다. 이 경우 원칙을 따라갈 수있는 것에 조금 확장 할 수 있습니까? – Mathieu
+1 "DI 원칙에 위배됨" 더 동의 할 수 없습니다. –
@Mathieu : DoerValidation은 효과적으로 DoerRepository에 의존합니다. 따라서 생성자에 전달하여 삽입하십시오. 'GetActiveDoers'를'DoerRepository' 자체에 인스턴스 메소드로 넣거나,해야한다면 가능하면 그것을 확장 메소드로 만듭니다. –