Autofac解析相同类型的多个实例

不是我自己

我的应用程序中有一个稍微修改的Mediatr处理命令处理版本我实现了MediatorPipeline,使我可以使用前置和后置处理器。

public class AsyncMediatorPipeline<TRequest, TResponse> 
    : IAsyncRequestHandler<TRequest, TResponse> 
    where TRequest : IAsyncRequest<TResponse>
{
    private readonly IAsyncRequestHandler<TRequest, TResponse> inner;
    private readonly IAsyncPreRequestHandler<TRequest>[] preRequestHandlers;
    private readonly IAsyncPostRequestHandler<TRequest,TResponse>[] postRequestHandlers;

    public AsyncMediatorPipeline(IAsyncRequestHandler<TRequest, TResponse> inner, 
        IAsyncPreRequestHandler<TRequest>[] preRequestHandlers, 
        IAsyncPostRequestHandler<TRequest, TResponse>[] postRequestHandlers)
    {
        this.inner = inner;
        this.preRequestHandlers = preRequestHandlers;
        this.postRequestHandlers = postRequestHandlers;
    }

    public async Task<TResponse> Handle(TRequest message)
    {
        foreach (var preRequestHandler in preRequestHandlers)
        {
            await preRequestHandler.Handle(message);
        }

        var result = await inner.Handle(message);

        foreach (var postRequestHandler in postRequestHandlers)
        {
            await postRequestHandler.Handle(message, result);
        }

        return result;
    }
}

我正在用autofac注册我的预处理器,如下所示:

builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
    .As(type => type.GetInterfaces()
        .Where(type => type.IsClosedTypeOf(typeof(IAsyncPreRequestHandler<>))))
    .InstancePerLifetimeScope();

在运行时,我得到了重复的前任。我必须过滤删除重复项的集合。我不确定为什么会这样。如果我注释掉注册,则不会得到任何预处理程序,这表明我没有在其他地方复制注册。

更新:这是有关似乎已两次注册的类型的更多详细信息。各种类定义:

具体处理程序

public class ClientEditorFormIdentifierValidationHandler 
: IAsyncPreRequestHandler<AddOrEditClientCommand>{}

命令类

public class AddOrEditClientCommand 
: IAsyncRequest<ICommandResult>{}

命令界面

public interface IAsyncRequest<out TResponse> { }
不是我自己

经过大量的故障排除后,我发现我实际上在两次注册处理程序。我喜欢使用Autofac模块将容器的配置分解为可管理的块。

在我的MVC5启动类中,我像这样注册模块:

builder.RegisterAssemblyModules(Assembly.GetExecutingAssembly());

该行深深地埋在“ InfrastructureModule”类中:

builder.RegisterModule<MediatorModule>();

当然,这是在重新注册我的调解员处理程序... DUH ..

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

注册多个相同类型的资源实例

来自分类Dev

如何在argparse中指定相同类型的父解析器的多个实例

来自分类Dev

相同类型的多个@ManagedProperty

来自分类Dev

相同类型的多个@ManagedProperty

来自分类Dev

类型提示多个相同类型的参数?

来自分类Dev

映射相同类型的模型以查看实例

来自分类Dev

每个视图模型实例化一个视图(相同类型的多个视图)

来自分类Dev

手动解析InstancePerRequest类型时未收到Autofac相同的注入实例

来自分类Dev

如何使用Autofac容器解析类型的实例?

来自分类Dev

多个相同类型的 Spring Components\Beans

来自分类Dev

Simple Injector可以使用不同的构造函数参数来注册相同类型的多个实例吗?

来自分类Dev

使用Simple Injector注册相同类型的实例

来自分类Dev

Java:将“ this”实例设置为相同类型的对象

来自分类Dev

Autofac使用不同的参数解析相同的类实例

来自分类Dev

Unity:配置容器以多种方式解析为相同类型

来自分类Dev

如何以html格式处理相同类型的多个输入?

来自分类Dev

注入具有多个相同类型参数的构造函数

来自分类Dev

处理相同类型的Google Cloud Messaging Server的多个响应

来自分类Dev

在Spring中需要多个相同类型的bean

来自分类Dev

相同类型的多个参数的编译时方法调用验证

来自分类Dev

Json-Schema:多个相同类型的元素

来自分类Dev

在MetadataProvider中获取相同类型的多个属性

来自分类Dev

实体框架中相同类型的多个集合

来自分类Dev

加载相同类型的ServiceStack OrmLite多个引用

来自分类Dev

在同一视图中创建多个相同类型的对象

来自分类Dev

声明具有相同类型的多个TypeScript变量

来自分类Dev

Spring Framework-相同类型的多个ModelAttributes

来自分类Dev

相同类型的多个可选参数的构造方法选择

来自分类Dev

从多个相同类型的PL / SQL集合中选择

Related 相关文章

  1. 1

    注册多个相同类型的资源实例

  2. 2

    如何在argparse中指定相同类型的父解析器的多个实例

  3. 3

    相同类型的多个@ManagedProperty

  4. 4

    相同类型的多个@ManagedProperty

  5. 5

    类型提示多个相同类型的参数?

  6. 6

    映射相同类型的模型以查看实例

  7. 7

    每个视图模型实例化一个视图(相同类型的多个视图)

  8. 8

    手动解析InstancePerRequest类型时未收到Autofac相同的注入实例

  9. 9

    如何使用Autofac容器解析类型的实例?

  10. 10

    多个相同类型的 Spring Components\Beans

  11. 11

    Simple Injector可以使用不同的构造函数参数来注册相同类型的多个实例吗?

  12. 12

    使用Simple Injector注册相同类型的实例

  13. 13

    Java:将“ this”实例设置为相同类型的对象

  14. 14

    Autofac使用不同的参数解析相同的类实例

  15. 15

    Unity:配置容器以多种方式解析为相同类型

  16. 16

    如何以html格式处理相同类型的多个输入?

  17. 17

    注入具有多个相同类型参数的构造函数

  18. 18

    处理相同类型的Google Cloud Messaging Server的多个响应

  19. 19

    在Spring中需要多个相同类型的bean

  20. 20

    相同类型的多个参数的编译时方法调用验证

  21. 21

    Json-Schema:多个相同类型的元素

  22. 22

    在MetadataProvider中获取相同类型的多个属性

  23. 23

    实体框架中相同类型的多个集合

  24. 24

    加载相同类型的ServiceStack OrmLite多个引用

  25. 25

    在同一视图中创建多个相同类型的对象

  26. 26

    声明具有相同类型的多个TypeScript变量

  27. 27

    Spring Framework-相同类型的多个ModelAttributes

  28. 28

    相同类型的多个可选参数的构造方法选择

  29. 29

    从多个相同类型的PL / SQL集合中选择

热门标签

归档