Nobody likes boilerplate code. We usually reduce it by using common object-oriented programming patterns, but often the code overhead of using patterns is almost the same—if not bigger—than if we’d used boilerplate code in the first place. It would be really nice to somehow just mark part of the code that should implement certain behavior, and resolve implementation somewhere else.
Read more: https://www.toptal.com/dot-net/aspect-oriented-programming-tutorial