将 postsharp 用于 AOP 时,OnEntry 方法不起作用

OnEntry method not working, when using postsharp for AOP

您好,我正在尝试使用 postsharp 方面进行验证。 FluentValidationAspect 不适用于 OnEntry 方法。 (postsharp v6.9.6)

FluentValidationAspect

[Serializable]
public class FluentValidationAspect : OnMethodBoundaryAspect
{
    private Type _validatorType;
    public FluentValidationAspect(Type validatorType)
    {
        _validatorType = validatorType;
    }
    public override void OnEntry(MethodExecutionArgs args)
    {
        var validator = (IValidator)Activator.CreateInstance(_validatorType);

        var entityType = _validatorType.BaseType.GetGenericArguments()[0];
        var entities = args.Arguments.Where(o => o.GetType() == entityType);

        foreach (var entity in entities)
        {
            ValidatorTool.FluentValidate(validator, entity);
        }
    }
}

它不会以任何方式进入 OnEntry 方法。

ProductManager

    [FluentValidationAspect(typeof(ProductValidator))]
    public Product Add(Product product)
    {
        return _productDal.Add(product);
    }

测试

[TestClass]
public class ProductManagerTests
{
    [ExpectedException(typeof(ValidationException))]
    [TestMethod]
    public void Product_Validation_Check()
    {
        Mock<IProductDal> mock = new Mock<IProductDal>();
        ProductManager productManager = new ProductManager(mock.Object);

        productManager.Add(new Product());
    }
}

ILSpy

每个应用 PostSharp 方面的项目都需要安装 PostSharp NuGet 包。