0
Мне нужно зарегистрировать несколько сервисов, которые имеют один и тот же интерфейс, но отличаются любым строковым ограничением. Чтобы быть более конкретным:Зарегистрировать службы с несколькими ключами или именами
[EventName("Domain/Task/Actions/Save")]
public class EntitySavedEventReceiver1 : IEventReceiver
{
public void Receive(RemoteEvent evnt)
{
}
}
[EventName("Domain/Task/Actions/Save")]
public class EntitySavedEventReceiver2 : IEventReceiver
{
public void Receive(RemoteEvent evnt)
{
}
}
регистрации я попробовал:
foreach (Type eventReceiverType in mainAssembly.GetTypes().Where(x => typeof (IEventReceiver).IsAssignableFrom(x)))
{
var attributes = eventReceiverType.GetCustomAttributes(typeof (EventNameAttribute), false);
foreach (var attribute in attributes.Cast<EventNameAttribute>())
{
builder.RegisterType(eventReceiverType)
.Keyed<IEventReceiver>(attribute.EventName)
// tried also named
.AsImplementedInterfaces();
}
}
и разрешения FUNC:
builder.Register<Func<string, IEnumerable<IEventReceiver>>>(c =>
{
var ctx = c.Resolve<IComponentContext>();
return eventName =>
{
var eventReceiver = ctx.ResolveKeyed<IEventReceiver>(eventName);
return new [] { eventReceiver };
};
});
Это отлично работает, но мне нужно, чтобы зарегистрировать несколько услуг по тем же именем или ключом и иметь возможность разрешать их все.
Я уверен, 'ResolveKeyed> (name)' будет работать. –
Черт .. так просто. Спасибо! –
@ default.kramer yours должен быть ответом, а не комментарием – onof