首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用autofac在IPipelineBehavior内核3中注册ASP.NET

用autofac在IPipelineBehavior内核3中注册ASP.NET
EN

Stack Overflow用户
提问于 2020-04-26 09:49:43
回答 1查看 843关注 0票数 0

我希望在我的项目中注册管道行为,并通过autofac注册。

我是这样实施的:

代码语言:javascript
复制
public class CheckUserNameExistValidation<TRequest, TResponse> : IPipelineBehavior<CreateUserCommand, OperationResult<string>>
{
    private readonly IDomainUnitOfWork unitOfWork;

    public CheckUserNameExistValidation(IDomainUnitOfWork unitOfWork)
    {
        this.unitOfWork = unitOfWork;
    }

    public async Task<OperationResult<string>> Handle(CreateUserCommand request, CancellationToken cancellationToken, RequestHandlerDelegate<OperationResult<string>> next)
    {
        var findUserName = await unitOfWork.UsersRepository.GetUserByUsernameAsync(request.Username, cancellationToken);

        if (findUserName.Result != null)
        {
            return OperationResult<string>.BuildFailure("UserName Exist");
        }

        return await next();
    }
}

我用这样的方式注册了这个管道:

代码语言:javascript
复制
 container.RegisterGeneric(typeof(CheckUserNameExistValidation<CreateUserCommand, OperationResult<string>>)).
                                                        As(typeof(IPipelineBehavior<CreateUserCommand, OperationResult<string>>));

但是,当我运行该项目时,它会向我显示以下错误:

BehaviorHandler.PipeLineBehaviors.RegisterUserBehavior.CheckUserNameExistValidation2[Command.UserCommands.CreateUserCommand,Common.Operation.OperationResult1System.String]类型不是一个开放的泛型类型定义。在Autofac.Features.OpenGenerics.OpenGenericRegistrationExtensions.RegisterGeneric(ContainerBuilder构建器上,在Autofac.RegistrationExtensions.RegisterGeneric(ContainerBuilder构建器上键入实现者),在Framework.Configuration.AutofacConfiguration.AutoInjectServices(ContainerBuilder容器中键入实现者)

有什么问题吗?我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-26 10:13:07

RegisterGeneric用于开放的泛型注册,在这里注册泛型类型而不指定泛型类型参数。

但这不是你在这里要做的。您正在注册IPipelineBehavior<CreateUserCommand, OperationResult<string>>,这是一个非常具体的类型。它是泛型的,但是它指定了类型参数,所以它和任何其他非泛型类型一样。

这意味着您必须使用常规的RegisterType方法:

代码语言:javascript
复制
container.RegisterType(typeof(CheckUserNameExistValidation<CreateUserCommand, OperationResult<string>>))
    .As(typeof(IPipelineBehavior<CreateUserCommand, OperationResult<string>>));

当然,您还可以使用Register的泛型版本:

代码语言:javascript
复制
container.RegisterType<CheckUserNameExistValidation<CreateUserCommand, OperationResult<string>>>()
    .As<IPipelineBehavior<CreateUserCommand, OperationResult<string>>>();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61438752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档