今日、オプションの依存関係 (私の場合はロガー インスタンス) のプロパティ注入と組み合わせて、型の複数の実装を解決することに関して、一見奇妙な問題に遭遇しました。
規約に基づいた構成を実現するために、Unity 2.1 と UnityConfiguration を使用しています。
ILoggerの実装を多くの型に挿入するために、 SetAllPropertiesConventionを使用しています。
container.Resolve<IProcessor>()
たとえば、ILogger のインスタンスを使用して単一の実装を解決している場合、適切に注入されます。
container.ResolveAll<IProcessor>()
ただし、プロパティを使用してそのタイプの複数のインスタンスを解決している場合は、 null のままです。
ここに私の登録コード:
container.RegisterInstance(typeof (ILogger), LoggerService.GetLogger());
container.Configure(c => c.Scan(scan =>
{
scan.AssembliesInBaseDirectory(a => a.FullName.StartsWith("My.Company"));
scan.InternalTypes();
scan.With<AddAllConvention>().TypesImplementing<IFetchDataCommand>();
scan.With<AddAllConvention>().TypesImplementing<IPrintConverter>();
scan.With<SetAllPropertiesConvention>().OfType<ILogger>();
}));
SetAllPropertiesConvention自体は、次のコードを使用して、注入されたロガー es プロパティを登録します。
IEnumerable<PropertyInfo> properties =
type.GetProperties().Where(p => p.CanWrite && p.PropertyType == interfaceType);
foreach (PropertyInfo property in properties)
{
registry.Register(null, type).WithInjectionMembers(new InjectionProperty(property.Name));
}
これはバグですか、それとも何か間違っていましたか。何か案は?