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 너의 대답은 대답이 아니라 주석이어야한다. – onof