In the last post I gave a brief introduction to ASP.NET vNext and the goals of the framework. This post will dive into more details on the overall architecture.
This diagram shows the dependencies between the github repositories:
These aren't all of the dependencies but it's enough to get an idea of the design. The big categories are:
- KRuntime - This contains the SDK and the runtime (kvm, kpm, and the kre). This includes all of the logic to boot the CoreCLR, full CLR and mono. It also contains a piece of code that Visual Studio communicates with to drive including intellisense, compilation errors in the IDE etc.
- Cross cutting concerns - These include Logging, DependencyInjection, FileSystem, and Configuration. Most of the projects depend on these in some form (directly or indirectly). Hopefully those are self explanatory.
- HttpAbstractions - This repository contains the new http abstractions, including but not limited to - HttpContext, HttpRequest and HttpResponse and the new IBuilder to wire up middleware. It also contains the OWIN support.
- Hosting - This repository has the project that understands how to boot web applications. All of the logic to find the Startup class and call into the Configure entry point lives here. It also contains the interfaces required to write up an http server. I'll show how easy this is in a later post by building an ASP.NET vNext layer on top of an unmodified Nowin webserver.
- Razor - Razor needs no introduction. The new razor has a new code generation model that isn't dependent on code dom and that we intend to make simpler to extend. We're going to make sure that the new Razor tooling works well for other frameworks that have razor support (Nancy, ServiceStack, SimpleWeb).
- Mvc - This is the new MVC/WebAPI/WebPages combined framework. We don't have the WebPages in there yet so don't go looking for it :). Some things to call out about the new Mvc:
- There are no more statics
- There's alot more extensibility points
- It can be self hosted
- Controllers don't require a base class.
- RazorViewEngine is Roslyn based
- *Everything* is async
- SignalR-Server - Near and dear to my heart is SignalR vNext. This version is pretty identical to https://github.com/SignalR/SignalR but built on top of the new http stack and cross cutting concerns. Stay tuned, we have lots of new features planned!
It's still early days, so don't expect to be deploying this to production, but this post should give you a good starting place if you're interested in any of the particular areas of the code.
If you're bored and want to read some code, here are some interesting things to look at: