2013-07-05 3 views
0

ASP.NET과 종속성 삽입에서 분리가 어떻게 작동하는지 파악하려고합니다.인터페이스, 비즈니스 로직 및 Autofac을 사용하는 global.asax

  • ASP.NET 클라이언트
  • BusinessLogic 클래스 LIB (BL)
  • 통합 클래스 LIB (모델, 인터페이스) 서비스는
  • 공유를 참조 호출
:

나는 네 개의 프로젝트가

통합 중에 다른 서비스를 호출하는 저장소가 있습니다. 저장소 "MyRepository"는 Shared에 배치 된 "IMyRepository"인터페이스를 구현하고 Shared에도 배치 된 객체를 반환합니다.

엄밀히 말하면 클라이언트에서 통합 프로젝트에 대한 참조/종속성을 좋아하지 않지만 모든 통신은 BL을 통해 이루어져야합니다. 클라이언트의 Global.asax에에서

, 나는 Autofac

var builder = new ContainerBuilder(); 
builder.RegisterModule(new AutofacWebTypesModule()); 
builder.RegisterControllers(typeof(MvcApplication).Assembly); 
builder.RegisterType<MyRepository>().As<IMyRepository>().InstancePerHttpRequest(); 

내 유형을 등록 그러나이 MyRepository의 구현을위한 통합 프로젝트를 참조하는 클라이언트 프로젝트를 필요로한다. 이런 식으로해야할까요?

어떻게 클라이언트에서 통합으로의 참조를 가져 오지 않고 분리를 깨끗하게 유지할 수 있습니까?

내 실제 프로젝트는 이보다 훨씬 더 큰 규모이기 때문에 의존성을 해결하려고 노력 중입니다.

시간 내 주셔서 감사합니다.

+1

관련 : http://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry-application – Steven

답변

2

내 정상적인 방법은 다음과 같습니다

  1. 각 개별 어셈블리의 유형을 발견 할 수있는 방법을 정의합니다. 가장 쉬운 방법은 (각 Autofac을 참조하는 것을 신경 쓰지 않는다면) 각 어셈블리에 Autofac Module을 넣는 것입니다. 그런 것이 마음에 들지 않으면 자신 만의 발견 추상화 (예 : MEF와 유사한 속성)를 정의 할 수 있습니다.

  2. 모든 어셈블리 검색. 가장 쉬운 방법은 bin 폴더를 검사하는 것이지만 사용자 정의 구성을 사용할 수 있습니다. Autofac의 최신 버전을 확인하지 않은 경우 모듈 검색과 관련하여 아무 것도 추가하지 않지만 이전에는 수동으로 수행했습니다.

  3. 이전에 정의 된 유형 검색 방법을 사용하여 발견 된 각 어셈블리의 모든 관련 유형을 등록하십시오.

관련 문제