종속성 주입의 기본 사항을 알고 있지만 Unity를 사용하여 MVC API C# 응용 프로그램에 올바르게 넣으려고 애 쓰고 있습니다. 내가 가진 문제는 내가 방법을 가진 컨트롤러를 가지게 될 것이고, 그 방법에서는 두 개의 객체를 말할 것입니다. 이러한 개체 중 하나는 데이터 액세스 계층에 대한 종속성을 가지며 다른 개체는 그렇지 않습니다. 정확히 어떻게 설정해야하는지 잘 모르겠습니다.Unity와 종속성 삽입 런타임 매개 변수로 생성자를 사용하여
내가 검색 개체에서 사용자를 가져 오는 다음과 같은 방법으로 컨트롤러가 있다고 가정 해 보겠습니다. 또한 SearchParameters 객체를 사용하여 검색을 수행합니다. 이름없이 검색하면 모든 결과를 얻습니다. 이름을 입력하면 해당 이름을 가진 사용자가됩니다.
public Users[] GetUsers(string name) {
Company.SearchParameters searchParams = new Company.SearchParameters(name);
Company.UserSearchService searchService = new Company.UserSearchService(searchParams);
return searchService.Search();
}
물론 이것은 매우 단순화 된 버전이지만이 경우 Search 메서드의 UserSearchService는 명시 적 데이터베이스 호출을 수행하고 있습니다. 그래서 나는 그것이 그것을 줄 필요가있는 의존성이라는 것을 압니다. SearchParameters는 실제로 데이터를 보유하는 클래스 일뿐입니다.
다음은 정확히 어떻게 해야할지 잘 모르겠습니다. 컨트롤러 자체에는 의존성이 없지만 UserSearchService는 유니티를 사용하는 방법을 잘 모르겠습니다. 올바르게 설정하고 생성자의 런타임 값을 고려합니다. 또한 SearchParameters가 종속성으로 간주되는지 아닌지 잘 모르겠습니다.
또한 SearchParameters 및 UserSearchService에는 문제가있는 경우이 컨트롤러에는 아마도 Company.UserAccount와 같이 비슷한 데이터 액세스 계층 종속성이 필요한 다른 클래스와 상호 작용하는 다른 메서드가 있습니다.
당신의 코드'Company.UserSearchService'에 따르면 (? 또는 당신이 뭔가를 생략) Company.SearchParameters''를 제외하고 종속성이 없습니다하지만 당신은 _The 컨트롤러 자체가 의존성을 가지고 있지만 있기 때문에하지 않는 말 UserSearchService does_ – neleus
UserSearchService의 Search 메서드에는 Database.Execute에 대한 명시적인 호출이 있습니다.이 메서드는 데이터베이스에 도달하여 현재 종속성이있는 정적 메서드입니다. 이 문제를 해결하여 실제로 테스트 할 수 있습니다. – Topojijo