Version
Google Translate

Getting Started with an Empty ASP.NET Core MVC / Razor Pages Application

This tutorial explains how to start VCP from scratch with minimal dependencies. You generally want to start with the startup template.

Create a New Project

  1. Create a new AspNet Core Web Application with Visual Studio 2022 (17.0.0+):

  1. Configure your new project:

  1. Press the create button:

create-aspnet-core-application

Install Verto.Vcp.AspNetCore.Mvc Package

You can use the VCP CLI to install the Verto.Vcp.AspNetCore.Mvc package to your project. Execute the following command in the folder of the .csproj file that you want to install the package on:

vcp add-package Verto.Vcp.AspNetCore.Mvc

If you haven't done it yet, you first need to install the VCP CLI. For other installation options, see the package description page.

Create the First VCP Module

VCP is a modular framework and it requires a startup (root) module class derived from VcpModule:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
using Verto.Vcp;
using Verto.Vcp.AspNetCore.Mvc;
using Verto.Vcp.Modularity;

namespace BasicAspNetCoreApplication
{
    [DependsOn(typeof(VcpAspNetCoreMvcModule))]
    public class AppModule : VcpModule
    {
        public override void OnApplicationInitialization(ApplicationInitializationContext context)
        {
            var app = context.GetApplicationBuilder();
            var env = context.GetEnvironment();

            // Configure the HTTP request pipeline.
            if (env.IsDevelopment())
            {
                app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseRouting();
            app.UseConfiguredEndpoints();
        }
    }
}

AppModule is a good name for the startup module for an application.

VCP packages define module classes and a module can depend on another. In the code above, the AppModule depends on the VcpAspNetCoreMvcModule (defined by the Verto.Vcp.AspNetCore.Mvc package). It's common to add a DependsOn attribute after installing a new VCP NuGet package.

Instead of the Startup class, we are configuring an ASP.NET Core pipeline in this module class.

The Program Class

Next step is to modify the Program class to integrate to the VCP module system:

using BasicAspNetCoreApplication;

var builder = WebApplication.CreateBuilder(args);

await builder.AddApplicationAsync<AppModule>();

var app = builder.Build();

await app.InitializeApplicationAsync();
await app.RunAsync();

builder.AddApplicationAsync<AppModule>(); adds all services defined in all modules starting from the AppModule.

app.InitializeApplicationAsync() initializes and starts the application.

Run the Application!

That's all! Run the application, it will just work as expected.

Using Autofac as the Dependency Injection Framework

While ASP.NET Core's Dependency Injection (DI) system is fine for basic requirements, Autofac provides advanced features like Property Injection and Method Interception which are required by VCP to perform advanced application framework features.

Replacing ASP.NET Core's DI system by Autofac and integrating to VCP is pretty easy.

  1. Install Verto.Vcp.Autofac package
Install-Package Verto.Vcp.Autofac
  1. Add the VcpAutofacModule Dependency
[DependsOn(typeof(VcpAspNetCoreMvcModule))]
[DependsOn(typeof(VcpAutofacModule))] //Add dependency to VCP Autofac module
public class AppModule : VcpModule
{
    ...
}
  1. Update Program.cs to use Autofac:
using BasicAspNetCoreApplication;

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseAutofac();  //Add this line

await builder.AddApplicationAsync<AppModule>();

var app = builder.Build();

await app.InitializeApplicationAsync();
await app.RunAsync();

Source Code

Get source code of the sample project created in this tutorial from here.

In this document