2

EF에는 매개 변수없는 생성자가 필요하지만이 방법을 재정의 할 수 있습니까?ASP.NET MVC 3에서 Entity Framework 4.1을 사용하여 모델 클래스의 생성자에 종속성을 주입하는 방법은 무엇입니까?

var myModelClasses = context.MyModelClasses; 

각 클래스가 주입 의존 인스턴스 생성됩니다 : 클라이언트가 같은 쿼리를 수행 그래서

public class MyModelClass 
{ 
    ADependency _a; 
    public MyModelClass(ADependency a) 
    { 
     _a = a; 
    } 
    ... 
} 

.

+1

클래스에는 원하는만큼 생성자를 포함 할 수 있습니다. –

+0

@Joe : 예. 그러나 모델 객체가 생성되는 방법에 관계없이 모델 객체를 만들 때 종속성이 주입되어야합니다. 나는 그 질문을 분명히 할 것이다. – Christian

답변

2

빈 생성자를 사용하고 DependencyResolver를 사용하여 생성자에서 수행 할 수 있습니다.

public class MyModelClass 
{ 
    ADependency _a; 
    public MyModelClass() 
    { 

      _a = DependencyResolver.Current.GetService<_a>(); 
    } 
    ... 
} 
+0

좋은 제안, 그러나 실제로 생성자에 종속성을 주입하는 방법을 찾고 있어요. – Christian

+1

@Christian이 해결책은 또 다른 문제를 야기합니다. 이제 싱글 톤/스태틱 인스턴스에 대한 숨겨진 의존성을 갖게되었습니다. 단위 테스트 및 리팩토링은 어려울 것입니다. – Eranga

+0

@ Eranga, 네, 저는 이것을 알고 있습니다 만, 의존성을 직접 새롭게하는 것보다 낫습니다. – Christian

2

아니요 재정의 할 수 없습니다. EF는 매개 변수없는 생성자를 사용해야하며 사용자 정의 팩토리를 사용할 방법이 없으므로이 동작을 변경할 수 없습니다. @Kevin이 언급 한 서비스 로케이터 패턴을 사용하여 솔루션을 사용하거나 ObjectMaterialized 이벤트를 처리하고 엔터티의 속성을 통해 종속성을 설정할 수 있습니다.

+1

감사합니다, Kevin은 '받아 들여진 응답'신용을 그 후에받을 가치가있다 것을 나는 짐작한다. – Christian

관련 문제