mercredi 8 février 2017

AutoFac Resolve CommandHandlers from specific derived services

Vote count: 0

Note: This is similar to this Question

My Question is if I have interfaces defined like below:
(NOTE: My code has more than one derived level; example for simplicity)

public interface IHandler
{
    void Handle(IServiceBase command);
}

public interface IHandler<out T> : IHandler where T : IServiceBase { }
public interface IServiceBase { }
public interface IServiceDerived : IServiceBase { }

public class ServiceBase : IServiceBase { }
public class ServiceDerived : IServiceDerived { }

public class ServiceBaseHandler : IHandler<IServiceBase>
{
    public void Handle(IServiceBase command) { }
}

public class ServiceDerivedHandler : IHandler<IServiceDerived>
{
    public void Handle(IServiceBase command) { }
}

My snippet of registrations for this example looks like:

builder.RegisterType<DerivedCommand>().AsImplementedInterfaces();
builder.RegisterType<BaseCommand>().AsImplementedInterfaces();
builder.RegisterType<DerivedCommandHandler>().AsImplementedInterfaces();
builder.RegisterType<BaseCommandHandler>().AsImplementedInterfaces();

This container.Resolve<IEnumerable<IHandler<IBaseCommand>>>(); only returns BaseCommandHandler.

I need to get BaseCommandHandler and all derived types, which in this instance would include DerivedCommandHandler too.

I realize this registration container.Resolve<IEnumerable<IHandler>>(); will resolve ALL handlers but I need to be able to resolve any where in the derived chain.

QUESTION: How do I resolve all handlers starting from a specific derived service?

asked 56 secs ago

Let's block ads! (Why?)



AutoFac Resolve CommandHandlers from specific derived services

Aucun commentaire:

Enregistrer un commentaire