2011-08-14 2 views
2

내 아키텍처를 개선하고 싶지만 종속성 문제를 해결하는 방법을 모르겠습니다.asp.net mvc 및 컨트롤러 서비스 아키텍처

내가 무엇을 가지고 :

  1. 클래스 라이브러리 CoreService 마녀, 인터페이스 IMail, Ilog을 많이 가지고 ISession
  2. 응용 프로그램에서 내가 IMail, Ilog, ISession를 기반으로 클래스를 만들어 시작하고 CoreService 클래스
  3. 에 전달
  4. CoreService 인스턴스가있는 기본 컨트롤러 클래스 (속성 CoreService Services {get;})
  5. 사용자 p lugin 사용 CoreService 인터페이스

문제 : 내가 새로운 서비스를 추가해야 할 때마다 응용 프로그램 시작 CoreService를 편집해야합니다. 이상적으로 저는 IMail (또는 다른 서비스) 용 클래스 lib를 만들고 web.config 또는 app start에 등록하고 싶습니다.

나에게 도움이 될만한 조언이나 링크를 보내 주시면 감사하겠습니다.

모든 사용자에게 감사드립니다.

+0

당신은 의존성 주입 프레임 워크와 XML 설정으로 이와 같은 것을 얻을 수 있지만 왜 앱 시작 코드를 편집하고 싶지 않습니까? – R0MANARMY

+0

@ R0MANARMY 응답을 주셔서 감사합니다. 왜냐하면 저는 엔터프라이즈 아키텍처를 구축하려고하기 때문에 많은 프로그래머가 특정 서비스를 만들 것이며 최소한의 단계로 일반적인 프로젝트에 신속하게 추가하고 싶습니다. –

답변

2

Ninject and XML configuration Binding을 살펴보십시오.

나는 이것이 당신이 성취하고자하는 목표의 두 부분을 모두 포함한다고 생각합니다. 이는 다시 컴파일 할 필요없이 구성을 수정할 수있을뿐만 아니라 종속성 삽입입니다.

Ninject (또는 다른 DI 컨테이너 - 예 : Unity)가 해결할 수없는 완전히 새로운 서비스를 추가하는 경우 코드를 편집해야합니다. 나는 그것이 피할 수 있다고 생각하지 않는다.

1

당신이 필요로하는 것은 의존성을 해결하기위한 의존성 주입 프레임 워크입니다. DI 프레임 워크는 객체의 생성과 수명 및 폐기를 관리합니다.

builder.RegisterType<MySession>().As<ISession>().InstancePerHttpRequest(); 
builder.RegisterType<MyMail>().As<IMail>().Singleton(); 

그런 다음 당신은 당신이 새로운 종속성을 추가해야하는 경우 하나의 장소를 수정해야이

public class MyController : BaseController 
{ 
    public MyController(ISession session, IMail mail) 
    { 
     _session = session; 
     _mail = mail; 
    } 

    //other methods and member variables 
} 

이 방법을 주입하는 생성자 주입을 사용할 수 있습니다.

+0

감사합니다. 매번 컨트롤러 컨트롤러를 변경하고 싶지는 않습니다. 내가 다른 클래스 던질 해결할 수 있습니까? –

+1

@Sanja 당신은 팩토리 클래스를 제공 할 수 있습니다. 그러나 위의 방법은 훨씬 더 깨끗합니다. 위의 코드를보고있는 다른 회원은 즉시 종속성을 인식합니다. – Eranga