ImsApiVersioning 1.1.0
appSetting.json
"ServiceVersions": {
"DefaultVersion": 2,
"Versions": [ { <<service>> : 1} ]
}
Program.cs
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
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
.NET 8.0
- Microsoft.AspNetCore.Http (>= 2.3.0)
- Swashbuckle.AspNetCore (>= 9.0.6)