Redakt uses dependency injection throughout the Redakt system. Services are registered with the built-in .NET Core IoC container in the Microsoft.Extensions.DependencyInjection
namespace.
Registering Redakt services
To make Redakt service registration simpler, you use the IRedaktBuilder
interface in the Microsoft.Extensions.DependencyInjection
namespace. All Redakt service registrations are done through extension methods on this interface. Every module contains an AddSomeRedaktModule()
type extension method that will add all required services for that module to the container.
You can obtain a reference to the IRedaktBuilder
interface through the AddRedakt()
extension method on the IServiceCollection
interface. This is normally done in the ConfigureServices()
method of your project's Startup.cs
file. If you've followed the project setup guide, your ConfigureServices()
method looks similar to this:
public void ConfigureServices(IServiceCollection services)
{
// ... framework and other services
var redaktBuilder = services.AddRedakt(Configuration);
redaktBuilder.AddIdentityServer();
redaktBuilder.AddContentManagement();
redaktBuilder.AddBackOffice();
redaktBuilder.AddLiteDbDataStore();
}
In this scenario, the Redakt Back Office application, Identity Server, Content Management, and Lite DB database modules have been registered. You can add other modules in the same way, with a redaktBuilder.AddSomeRedaktModule()
call. The order of adding modules here is not important. All Redakt builder extension methods are in the same namespace, so Intellisense will show you the available Redakt extension methods if you have installed the corresponding NuGet packages.
Injecting services
You can inject Redakt services into your own code at any place where services may be injected, like controllers, attributes, filters, etc. All Redakt services and components are registered with the IoC container, so you can inject any service you need. You will usually want to inject one of the following services.
IRedaktApplication
This is the interface for the main Redakt application class, part of the Redakt.Core
namespace. It contains the services collection and global options. If you only need a single Redakt service, you can also inject just that service interface instead of the whole Redakt application instance.
IRedaktContext
For request-bound code, you can inject the IRedaktContext
interface from the Redakt.Web
namespace. This contains the current site object, page object, HTTP context, and helper methods. This is the interface you will normally want to inject into custom controllers, attributes, and tag helpers. It is also passed as the model into all Razor page views.
Please note that modifying properties of the Redakt context during a request can lead to unexpected results and is generally not recommended.
Replacing the built-in container
The built-in IoC container is normally adequate, but if you prefer a different (faster or more feature-rich) container, a number of mainstream containers can be configured to replace the built-in .NET Core container. See the respective container's documentation for how to do this (some linked below).