Я использую PostSharp 6.2.8 для аспектно-ориентированного программирования (AOP). Мое решение - .Net Core 2.2 Solution.
Я создал аспект. Но в PostSharp Explorer я вижу это сообщение:
Я установил PostSharp NuGet Package (6.2.8) на каждый проект, который я использую в качестве аспекта или ссылки.
Я установил расширение PostSharp 6.2.8 для Visual Studio. Я строю решение успешно.
Кроме того, тест, относящийся к аспектам, не выполняется, а при отладке точки останова пропускаются.
Код аспекта:
[Serializable]
public class FluentValidationAspect : OnMethodBoundaryAspect
{
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(t => t.GetType() == entityType);
foreach (var entity in entities)
{
ValidatorTool.FluentValidate(validator, entity);
}
}
}
....
public WordValidator()
{
RuleFor(w => w.WordText).NotEmpty();
RuleFor(w => w.WordText).Length(1, 250);
}
Aspect Call:
public class WordManager : IWordService
{
...
[FluentValidationAspect(typeof(WordValidator))]
public Word Add(Word word)
{
//ValidatorTool.FluentValidate(new WordValidator(), word);
return _wordDal.Add(word);
}
...
}
Аспектный тест:
[ExpectedException(typeof(ValidationException))]
[TestMethod]
public void Word_validation_check()
{
Mock<IWordDal> mock = new Mock<IWordDal>();
WordManager wordManager = new WordManager(mock.Object);
Word word = new Word() { WordText = "" };
wordManager.Add(word);
}