Table des matières

StructureMap

Documentation du StructureMap

Cette page est une prise de notes

Alternative : Autofac

Exemple avec ASP.NET Core

Installer le package StructureMap:

<PackageReference Include="StructureMap" Version="4.5.2" />
PM> Install-Package StructureMap

Le package StructureMap.Microsoft.DependencyInjection peut également être utilisé.

Le package StructureMap (4.5.2) est surtout utilisé pour .NET Framework, mais fonctionne quand même avec .NET Core.

Créer un service quelconque. Ce service doit avoir son interface. Par exemple, on a un service CarsProviderService qui implémente ICarsProviderService. Nous avons la méthode GetCars() dans ce service qui retourne une liste de voitures avec la marque, le modèle, l'année, etc.

public interface ICarsProviderService
{
    Dictionary<Guid, CarDto> GetCars();
}

Dans Startup.cs:ConfigureServices(), on a simplement à ajouter :

services.AddSingleton<ICarsProviderService, CarsProviderService>();

Ensuite, dans le contrôleur :

private readonly ICarsProviderService _carsProviderService;
 
public CarsController(ICarsProviderService carsProviderService)
{
    this._carsProviderService = carsProviderService;
}

Et on peut utiliser le service:

// GET: api/cars
[HttpGet]
public IEnumerable<CarDto> Get()
{
    return this._carsProviderService.GetCars().Select(x => x.Value);
}

Registres

Les Registry servent à enregistrer des services. Voir la documentation sur les Registry.

public class SomethingRegistry : StructureMap.Registry
{
    public SomethingRegistry()
    {
        this.For<ISomeService>().Use<ConcreteSomeService>().Singleton();
 
        this.For<ICarService>().Add<IVolvoCarService>().Named("volvo");
        this.For<ICarService>().Add<IFordCarService>().Named("ford");  
 
        this.For<Consumer>().Use<Consumer>().Ctor<ICarService>().IsNamedInstance("volvo");      
    }
}