World is now on Opti ID! Learn more

Kristoffer Lindén
Dec 13, 2021
  1687
(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

Please login to comment.
Latest blogs
Importing Form Submission Data into Optimizely Forms Using DdsPermanentStorage

Recently, we needed to import a large number of records from a third-party system into Optimizely Forms . The data was available in CSV format, and...

Pawan Singh | Jul 16, 2025

Cancelling CMS Scheduled Jobs

From flags to tokens: making Optimizely CMS scheduled jobs more elegant with .NET cancellation tokens.

Damian Smutek | Jul 16, 2025 |

Optimizely Frontend Hosting: Deploy Without PowerShell Using the @kunalshetye/opticloud Package

In my last two blog posts, I walked through how to get started with deploying a headless app to Optimizely Frontend Hosting using PowerShell and th...

Szymon Uryga | Jul 15, 2025

New Administrator Certifications Are Here — 7 Ways to Get Certified with Optimizely

Not a developer but want to prove your product expertise? We’ve got great news. We’re thrilled to announce the expansion of Optimizely’s...

Satata Satez | Jul 15, 2025