Kristoffer Lindén
Dec 13, 2021
visibility 2194
star star star star star star
(1 votes)

How to simplify initialization for your custom plugin

When your are creating a custom plugin you might want to initialize your plugin on startup. You could of course add everything you need in the Optimizely Startup.cs class but is is much nicer to have the user just adding one row of code using an extension method.

Your extension could look something like this:

public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddMyPlugin(this IServiceCollection services, string connectionString)
    { 
        services.AddDbContext<MyDbContext>(x => x.UseSqlServer(connectionString))
            .AddScoped<Microsoft.EntityFrameworkCore.DbContext, MyDbContext>()
            .AddSingleton<IMyService1, MyService>()
            .AddSingleton<IMyService2, MyService2>();      

        return services;
    }
}

And the only thing you need to add in Startup.cs is this:

services.AddMyPlugin(_configuration.GetConnectionString("EpiserverDB"));

I had som static content that generated 404 so I also had to create an extension to handle static content.

public static IApplicationBuilder UseMyPluginStaticContent(this IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(
            Path.Combine(env.ContentRootPath, "modules", "MyPlugin", "ClientResources")),
        RequestPath = "/modules/MyPlugin/ClientResources"
    });

    return app;
}

and the add this row in the Startup.cs Configure method:

app.UseMyPluginStaticContent(env);

This is an easy way to create advanced initialization but the user only needs to add two rows of code that clearly points out that they are use by My Plugin.

Dec 13, 2021

Comments

error Please login to comment.
Latest blogs
Optimizely Commerce 14 Now Supports .NET 10

In my previous post, Optimizely CMS 12 Now Fully Supports .NET 10 , I noted one remaining limitation: Commerce 14 (Commerce Connect) did not yet...

Bien Nguyen | Aug 7, 2026

The Top 10 Things I'm Actually Using AI For

A while back I wrote about ReviewPR, an Azure Function that uses AI to review Azure DevOps pull requests. That was one specific use case, but over...

KennyG | Aug 5, 2026

Drag-and-Drop Reordering for Commerce Media Collection in Optimizely Commerce Connect

Optimizely Commerce Connect ships a polished asset editor for the CommerceMediaCollection  property on catalog entries. It lets editors add, remove...

Linh Doan Cuu | Aug 5, 2026

Order tabs with drag and drop V2

I earlier did a very simple Blazor version to be able to sort tabs with drag and drop. I wanted to update it a bit and also display how the tabs ar...

Per Nergård (MVP) | Aug 4, 2026