2011-12-01 3 views
1

2 개의 메타 데이터 항목을 지정하는 Autofac을 사용하려고합니다. 그러나이 두 항목을 모두 지정하여 서비스를 검색하는 방법에 대해서는 명확하지 않습니다. 어셈블리 이름과 버전에 대한 메타 데이터 항목이 있습니다. 등록 조각은 다음과 같다 : 클래스의 costructor 또는를 해결하는 클래스Autofac과 WithMetadata 할당을 여러 개 사용하는 중

IEnumerable<Lazy<IPlugin, IMetaDataName>> 

: 내가 찾을 수

builder.RegisterAssemblyTypes(assembly).Where(
t => t.GetInterfaces().Any(i => 
plugin.Interface == i.Name)).As<IPlugin>() 
.WithMetadata<IMetaDataName>(m => m.For(pn => pn.Name, name) 
.WithMetadata<IMetaDataVersion>(m => m.For(pn => pn.Version, version) 

유일한 문서와 예제 내가이 구문을 사용할 수 있도록 지정 봉사 후에.

Get the service that has the MetaDataName == "Service1" AND MetaDataVersion == "1.4" 

은 현재 내가 작동하지만 투박한 느낌 (1 개) 메타 데이터 유형에 대해 함께 두 연결된 한 : 내가 후 나는 나를 다음을 수행 할 수 있도록하는 메커니즘입니다. 이것에 대한 더 나은 접근법이 있습니까?

감사합니다.

크레이그.

답변

0

두 인터페이스를 하나로 연결하는 대신 가져 오기 도구에 대해 별도의 연결 인터페이스를 만들면됩니다.

등록시 사용 된 인터페이스 이름이 종속성으로 사용 된 인터페이스 이름과 일치 할 필요는 없습니다. 속성 이름은 현재 유일한 공유 정보입니다.

종속성에 사용 된 메타 데이터보기 유형은 실제로 종속성을 제공하는 클래스에 고유하므로이 값은 독립적으로 다를 수 있습니다.

정확히이 답변을 찾고 계시지 만 도움이되기를 바랍니다.

+0

안녕하세요 Nicholas, 답장을 보내 주셔서 감사합니다. 내가 한 일은 이름과 버전의 문자열을 메타 데이터 인터페이스의 한 속성 (Name_Version 형식)으로 연결하고 수신기 생성자의 종속성으로 사용합니다. 그것은 효과가 있으며, 프로젝트를 계속할 필요가 있습니다.하지만 나중에 다시 돌아가서 내가 원하는 것에 더 가깝게 만들 수 있는지 알아볼 것입니다. Autofac에 대한 모든 작업을 해주셔서 감사합니다. – Craig

관련 문제