ExplicitExpansionCompanion is generic resolver for data transfer objects that have explicit expansions. This libary is a perfect addition to an application that is using Automapper and wish to design an API where the user can specify in their requests which expansions they require.
Sometimes a resource maybe linked to another resource, for example a Person
and their Pet
.
When querying information on a Person
it might be nessary to pull information on the Pet
.
ExplicitExpansion allows you to control this by stating which nested objects should be included.
Get Person Example (without expanding pet)
{
"Id": "1",
"Name": "Simon",
"Pet": Null
}
Get Person Example (with expanding pet)
{
"Id": "1",
"Name": "Simon",
"Pet": {
"Name" : "Fluffy"
}
}
This can be used with AutoMapper's Queryable Extensions to ensure your query does not pull too much data.
Install with NuGet
dotnet add package ExplicitExpansionCompanion
In your startup.
public void ConfigureServices(IServiceCollection services)
{
services.AddExplicitExpansionCompanion();
}
Whenever you need the companion, just inject into your class and use the Resolve
method.
private readonly IExpansionResolver<YourDto> _resolver;
public MyClass(IExpansionResolver<YourDto> resolver)
{
_resolver = resolver;
}
public void MyMethod(string[] listOfTerms)
{
var includes = _resolver.Resolve(listOfTerms);
}
Automapper Example
private readonly IExpansionResolver<YourDto> _resolver;
private readonly IMapper _mapper;
public MyClass(IExpansionResolver<YourDto> resolver, IMapper mapper)
{
_resolver = resolver;
_mapper = mapper;
}
public void MyMethod(string[] listOfTerms)
{
var includes = _resolver.Resolve(listOfTerms);
var resultOfQuery = Query
.ProjectTo<YourDto>(_mapper.ConfigurationProvider, null, includes.ToArray());
}
If you have any feedback, please reach out to us at