/ExplicitExpansionCompanion

A generic resolver for DTOs that have explicit expansions.

Primary LanguageC#

ExplicitExpansionCompanion

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.

What is ExplicitExpansion?

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.

AutoMapperDocs

Installation

Install with NuGet

  dotnet add package ExplicitExpansionCompanion

In your startup.

public void ConfigureServices(IServiceCollection services)
{
    services.AddExplicitExpansionCompanion();
}

Usage/Examples

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());
}

Authors

Demo

Demo Project

Feedback

If you have any feedback, please reach out to us at