Kristoffer Lindén
Dec 13, 2021
  1499
(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
How to add an Admin Mode add-on in Optimizely CMS12

How to add a new add-on with navigation and unified stylesheet

Bartosz Sekula | Jan 2, 2025 | Syndicated blog

Managing Your Graph Conventions

Recently, Optimizely released a Conventions API for manging how various fields on your CMS content are indexed by the Graph. This is an extremely...

Ethan Schofer | Dec 31, 2024

SaaS CMS and Visual Builder - Opticon 2024 Workshop Experience

Optimizely is getting SaaSy with us…. This year Optimizely’s conference Opticon 2024 took place in San Antonio, Texas. There were a lot of great...

Raj Gada | Dec 30, 2024

Copy Optimizely SaaS CMS Settings to ENV Format Via Bookmarklet

Do you work with multiple Optimizely SaaS CMS instances? Use a bookmarklet to automatically copy them to your clipboard, ready to paste into your e...

Daniel Isaacs | Dec 22, 2024 | Syndicated blog