ImsApiVersioning 1.1.1

appSetting.json

"ServiceVersions": {
    "DefaultVersion": 2,
    "Versions":  { <<service>> : 1,service2:2} 
  }

Program.cs

//for swagger as well
 builder.Services.AddImsApiVersioning(option =>
    {
        option.DefaultVersion = 2;
        option.SupportedVersion = ["1.0", "2.0"];
        option.CurrentSetting = "all";
        option.SwaggerTitle = "New company";

    });
builder.Services.AddVersionResolver(builder.Configuration);
builder.Services.AddSwaggerGenCustom();

DI Register. It Register all the classes inherited by the interface

builder.Services.AddVersionedService<IClass>(ServiceLifetime.Scoped);

In App section Before app.UseRouting

    app.UseImsApiVersioning();
   

    app.UseSwagerUICustom();

    app.UseRouting();

Class creation

public Interface IClass
{
string doSomething(string a,string b);
int Add (int a, int b);
}

public class ClassA:IClass
{
    private readonly ILogger<ClassA> _logger;
    public ClassA(ILogger<ClassA> logger)
    {
        _logger=logger;
    }

    public string doSomething(string a, string b)
    {
        return "I am Class A";
    }

    public virtual int Add (int a, int b)
    {
        return a+b;
    }
}


public class ClassAv1:ClassA
{
    private readonly ILogger<ClassAv1> _logger;
    public ClassA(ILogger<ClassAv1> logger):base(logger)
    {
        _logger=logger;
    }

    public override int Add(int a,int b)
    {
        return a * b ;
    }
}


public class ClassAv2:ClassA
{
    private readonly ILogger<ClassAv1> _logger;
    public ClassA(ILogger<ClassAv1> logger):base(logger)
    {
        _logger=logger;
    }

    public override int Add(int a,int b)
    {
        return base(a,b);
    }
}

Decorated Class Support For Decorated Pattern

For Decorated Pattern add interface IVersionedDecorator exaple

public class ClassADecorated:IClass,IversionedDecorator<IClass>
{
    private readonly IClass _inner;
    public ClassADecorated ( IClass inner)
    {
        _inner = inner
    }

     public string doSomething(string a, string b)
    {
        var retrunfromImplementation = _inner.doSomething(a,b);
        return $"I am Decorator for {retrunfromImplementation}";
    }

    public int Add (int a, int b)
    {

        return _inner.Add(a,b) *10;
    }

}

IN Endpoint

It swagger it will automatically added v1, v2 'as mention in option.DefaultVersion = 2; option.SupportedVersion = ["1.0", "2.0"];

While calling api endpoint

add v1 like api/v1/dosomething, api/v2/dosomething

Note

ClassAv1 will be resolved when api/v1 ClsasAv2 will be resloved when api/v2

No packages depend on ImsApiVersioning.

Previous way of Version factory is changed, Now it will resolve iteself without versionfactory. You can still use it in previous version way. I also support Decorator pattern

Version Downloads Last updated
1.1.1 6 09/24/2026
1.1.0 2 09/24/2026
1.0.6 3 09/22/2026
1.0.5 11 08/05/2026
1.0.4 30 07/25/2026
1.0.3 7 07/25/2026
1.0.2 8 07/22/2026