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