A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/TylerBrinks/Snap below:

TylerBrinks/Snap: Simple .NET Aspect-Oriented Programming

SNAP is a Aspect Oriented Programming (AoP) utility for .NET

!! This project is no longer maintained due to the component/middleware extensibility models .NET core 2+ make use of.

SNAP works at runtime unlike PostSharp which modifies IL at compile time. SNAP works in tandem with your favorite IoC container.

SNAP is simple. You decorate methods with your own custom attributes. Your attributes derive from SNAP's base attribute. SNAP uses your IoC of choice to intercept method calls based on the attribute. Methods are intercepted with YOUR own code either before and/or after a method call

Install any of the SNAP provider pagckages from the NuGet Package Manager or via command line.
We'll use StructureMap for this example.

Install-Package SNAP.StructureMap
	// Configure SNAP to look at all assemblies starting with the "ConsoleApplication1" namespace.
	// Next, tell SNAP to intercept any code decorated with a DemoLoggingAttribute by running
	// an instance of the DemoLoggingInterceptor class.
	SnapConfiguration.For<StructureMapAspectContainer>(c =>
            {
            	// Tell SNAP to only be concerned with stuff starting with this namespace.
                c.IncludeNamespace("ConsoleApplication1*");
                // Tell SNAP to intercept any method or class decorated with "DemoLoggingAttribute"
                // by wrapping execution in your own DemoInterceptor class.
                c.Bind<DemoLoggingInterceptor>().To<DemoLoggingAttribute>();
            });

	// Configure StructureMap as usual.
	ObjectFactory.Configure(c => c.For<ISampleClass>().Use<SampleClass>());
	
	
	
	// Use your own class to handle interception.  Logging is a good example.
	public class DemoLoggingInterceptor : MethodInterceptor
	{
	    public override void InterceptMethod(IInvocation invocation, MethodBase method, Attribute attribute)
	    {
		// Log something important here.
		
		// Then continue executing your method.
		invocation.Proceed();
	    }
	}
Is this a Magic Black Box?

Unlinke tools that use IL weaving, SNAP's runtime approach means 100% of your code is unchanged. The difference is that SNAP creates a proxy object at runtime that wraps your class instances. This is similar to how the Entity Framework issues proxies of your POCOs to assis with state and navigation properties. It's still 100% your code.

The project has a comprehensive suite of tests. Currently the tests exercise scenarios for each of the IoC providers.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4