如何在autofac中自动为泛型类创建包装器

时间:2016-10-30 22:36:19

标签: c# design-patterns structure autofac

我有简单的代码:     公共接口ICommand {}

public class CommandA : ICommand {}

public class CommandB :ICommand{}

public interface IHandler<in TCommand> where TCommand: ICommand { 
    void Handle(TCommand command); }

public class Handler1: IHandler<CommandA> { public void Handle(CommandA command) {}}

public class Handler2: IHandler<CommandA> { public void Handle(CommandA c) {} }

public class Handler3: IHandler<CommandB> { public void Handle(CommandB c) {} }
public class Handler4: IHandler<CommandB> { public void Handle(CommandB c) {} }
}

我使用AsClosedTypesOf注册所有处理程序

builder.RegisterAssemblyTypes(myAssembly).AsClosedTypesOf(typeof(IHandler));

我还有调度程序类,它应该找到给定命令的所有处理程序并执行它们

public class Dispatcher {
void Dispatch<TCommand>(TCommand command) where TCommand : ICommand {
    var handlers = context.Resolve<IEnumerable<IHandler<TCommand>>>();
    foreach (var handler in handlers) { handler.Handle(command); }}}

我想要另一个调度程序,像这样的处理程序包装器:

public class ActorHandler<TCommand> where TCommand : ICommand {
private IHandler<TCommand> _handler;

public ActorHandler(IHandler<TCommand> handler){
    _handler= handler;}
public void OnReceive(object obj) { var command =(TCommand)obj; _handler.Handle(command);}}

我如何自动为所有处理程序执行此操作?

0 个答案:

没有答案