을 사용하여 어셈블리의 모든 유형을 등록윈저 - 성 :이 같은 어떤 것을 할 수있는 코드에서 설정 파일
container.Register(AllTypes.FromAssemblyNamed("AssemblyName"));
내가 "Windsor.Config"구성 파일을 사용하여 같은 일을 할 수 ???
을 사용하여 어셈블리의 모든 유형을 등록윈저 - 성 :이 같은 어떤 것을 할 수있는 코드에서 설정 파일
container.Register(AllTypes.FromAssemblyNamed("AssemblyName"));
내가 "Windsor.Config"구성 파일을 사용하여 같은 일을 할 수 ???
귀하의 의견에 회신하십시오.
또한 3 번째 방법이 있습니다 (현재 Windsor 2.5, 베타 2 - 최종 출시가 곧 예정 됨). 당신은 당신의 각 모듈을 가질 수
윈저을 참조하고,이 모든 어셈블리에서 구성 요소를 설치하는 새로운 디렉토리 검색 기능을 사용 할 수있는 것보다 각 모듈은 Installers.
의 자신의 세트를 가지고 :
// In your root assembly
var container = new WindsorContainer();
container.Install(
FromAssembly.This(),
FromAssembly.InDirectory(new AssemblyFilter("Modules")),
Configuration.FromAppConfig()
)
또한 동일한 구조의 구성 요소가있는 경우 단일 설치 프로그램에서 여러 어셈블리의 구성 요소를 등록 할 수도 있습니다. See more here.
container.Register(
AllTypes.FromAssemblyInDirectory(new AssemblyFilter("Modules"))
.Where(t=>t.Namespace.EndsWith(".Services"))
.WithService.DefaultInterface()
);
아주 멋지다! 설치()에 대한이 과부하에 대해 알지 못했습니다. 나는 일반적으로 모든 설치 프로그램을 먼저 해결 한 다음 Install()을 개별적으로 호출합니다. – Ryan
Krzysztof : 당신은 내 영웅입니다 :) 나는 당분간 투표 할 수 없습니다. 나는 15에 투표 할 것입니다. –
유창한 구성 API 만 있으면 응용 프로그램 규칙을 설정할 수 있으므로 새 구성 요소를 만들 때 개별적으로 등록하지 않아도됩니다 (예를 들어 보여줍니다).
당신은 할 수있는 사소한 시설, 예를 들어 작성할 수 있습니다
AllTypesConfig.xml을
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<facilities>
<facility id="alltypes">
<assemblies>
<item>Castle.Core</item>
</assemblies>
</facility>
</facilities>
</configuration>
코드 :
public class AllTypesFacility : AbstractFacility {
protected override void Init() {
var asmList = FacilityConfig.Children["assemblies"].Children;
foreach (var asm in asmList)
Kernel.Register(AllTypes.FromAssemblyNamed(asm.Value).Pick());
}
}
var container = new WindsorContainer(@"..\..\AllTypesConfig.xml");
container.AddFacility("alltypes", new AllTypesFacility());
container.Resolve<NullLogger>();
더 많은 유연성을 필요로하는 경우는 것 XML에서 유창한 구성을 표현하는 것이 점차 어려워집니다.
왜? 코드에서 왜 그렇게하고 싶지 않습니까? –
글쎄, 나는 30 개 이상의 모듈을 포함하는 거대한 프로젝트를 진행하고있다. 각 모듈은 해당 하위 시스템에 대한 프레젠테이션 UI를 제공해야합니다. 각 서브 시스템에는 : 도메인, 저장소, 코어, 응용 프로그램 서비스 등이 있습니다. 및 모든 어셈블리는 주 컨테이너에 등록되어야합니다. 그래서 모듈 중 하나에 코드를 등록해야합니다 (모듈에 대한 모든 참조가 필요함을 의미 함) 또는 등록해야 할 때마다 기본 윈저 구성 파일을 수정해야합니다. 새로운 구성 요소. –