Dependency Injection¶
Registering the Service¶
Elm supports Dependency Injection out of the box and it’s fairly simple to set up. In this page we’ll use an ASP.NET Core WebApi/MVC6 project as an example but this would work with a Console project as well.
In your Startup.cs
file you should have a method to configure services. The default Microsoft scaffolding creates it as public void ConfigureServices(IServiceCollection services)
.
To add Elm simply add this line:
services.AddElm<MySqlDriver>(options => options.ConnectionString = Configuration["Data:ConnectionString"]);
This assumes you want to use MySQL/MariaDb. Replace MySqlDriver
by SQLiteDriver
or SqlServerDriver
depending on your requirements. This also assumes that your ConnectionString is stored in a JSON file that was provided to the ConfigurationBuilder
in the Startup
method, like this:
public IConfigurationRoot Configuration { get; set; }
public Startup(IHostingEnvironment env)
{
var configurationBuilder = new ConfigurationBuilder();
configurationBuilder
.AddJsonFile("config.json")
.AddEnvironmentVariables();
configurationBuilder.AddCommandLine(new string[] { });
Configuration = configurationBuilder.Build();
}
You will of course need to use the relevant namespaces, in our cases they would be:
using Folke.Elm;
using Folke.Elm.Mysql;
Now that the service is registered, let’s see how to setup a Controller to use it.
Use the Service¶
In your Controller, simply specify in the constructor that you want an IFolkeConnection
object. Create a Property for it and associate it.
[Route("api/[controller]")]
public class MyController : Controller
{
protected readonly IFolkeConnection session;
public MyController(IFolkeConnection session)
{
this.session = session;
}
[HttpGet("{id}")]
public async Task<IActionResult> Get(int id)
{
Product myProduct = session.Load<Product>(id);
return Ok(myProduct);
}
}