This tutorial explains how to start ABP from scratch with minimal dependencies. You generally want to start with a startup template (TODO: link).
Create a new Regular .Net Core Console Application from Visual Studio:
Volo.Abp.Core is the core nuget package to create ABP based applications. So, install it to your project:
Install-Package Volo.Abp.Core
ABP is a modular framework and it requires a startup (root) module class derived from AbpModule
:
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
namespace AbpConsoleDemo
{
public class AppModule : AbpModule
{
public override void ConfigureServices(IServiceCollection services)
{
services.AddAssemblyOf<AppModule>();
}
}
}
AppModule
is a good name for the startup module for an application.
A module class can register services to Dependency Injection by overriding ConfigureServices
method as shown here. AddAssemblyOf<...>
is a special extension method of ABP that registers all services in an assembly by convention (TODO: link to DI document). While this is optional, a module generally registers some services.
The next step is to bootstrap the application using the startup module created above:
using System;
using Volo.Abp;
namespace AbpConsoleDemo
{
class Program
{
static void Main(string[] args)
{
using (var application = AbpApplicationFactory.Create<AppModule>())
{
application.Initialize();
Console.WriteLine("Press ENTER to stop application...");
Console.ReadLine();
}
}
}
}
AbpApplicationFactory
is used to create the application and load all modules taking AppModule
as the startup module. Initialize()
method starts the application.
The application above does nothing. Let's create a service does something:
using System;
using Volo.Abp.DependencyInjection;
namespace AbpConsoleDemo
{
public class HelloWorldService : ITransientDependency
{
public void SayHello()
{
Console.WriteLine("Hello World!");
}
}
}
ITransientDependency
is a special interface of ABP that automatically registers the service as transient (see dependency injection document).
Now, we can resolve the HelloWorldService
and say hello. Change the Program.cs as shown below:
using System;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
namespace AbpConsoleDemo
{
class Program
{
static void Main(string[] args)
{
using (var application = AbpApplicationFactory.Create<AppModule>())
{
application.Initialize();
//Resolve a service and use it
var helloWorldService = application.ServiceProvider.GetService<HelloWorldService>();
helloWorldService.SayHello();
Console.WriteLine("Press ENTER to stop application...");
Console.ReadLine();
}
}
}
}
While it's enough for this simple code example, it's always suggested to create scopes in case of directly resolving dependencies from IServiceProvider
(TODO: see DI documentation).
Get source code of the sample project created in this tutorial from here.