如何使用Castle.DynamicProxy .in c#动态设置拦截器返回值

问题描述

我正在 .Net 中开发 Web API,我想将 AOP 与与 Autofac 集成的 CastleCoreDynamicProxy 一起使用,我在我的项目中实现了它,但到目前为止我无法解决一件事。当我尝试设置调用返回时值如下; invocation.ReturnValue = ApiResult.Error(Error.DefaultError) ,它会抛出异常,因为调用的返回类型是 IResult<DummyData>,它等于 ApiResult<DummyData>(Error.DefaultError)。 那是验证拦截

var validator = (IValidator)Activator.CreateInstance(attribute.ValidatorType);

        var entityType = attribute.ValidatorType.BaseType.GetGenericArguments()[0];

        var entities = invocation.Arguments.Where(t => t != null && t.GetType() == entityType).ToList();

        foreach (var entity in entities)
        {
            var result = validator.Validate((IValidationContext)entity);

            if (!result.IsValid)
            {
                var apiError = Core.Helpers.Extensions.ConvertResult(result);

                invocation.ReturnValue = ApiResult.Error(apiError);
            }
        }

        invocation.Proceed();
    } `

我试图定义该方法是否有要返回的数据,我可以从调用的信息中获取它,但是当方法有要返回的数据时出现另一个问题,导致我如何设置此 invocation.ReturnValue = ApiResult.Error<Article>(Error.DefaultError) 或 {{ 1}} 取决于方法返回值。 一个想法可能是生成继承我项目中所有可能类的基类,然后将返回值设置为 invocation.ReturnValue = ApiResult.Error<Category>(Error.DefaultError) ,而不考虑任何方法的返回值,但我认为这个问题有不错的解决方案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)