Huvermann.Extension.DiNameResolving
1.0.1
dotnet add package Huvermann.Extension.DiNameResolving --version 1.0.1
NuGet\Install-Package Huvermann.Extension.DiNameResolving -Version 1.0.1
<PackageReference Include="Huvermann.Extension.DiNameResolving" Version="1.0.1" />
paket add Huvermann.Extension.DiNameResolving --version 1.0.1
#r "nuget: Huvermann.Extension.DiNameResolving, 1.0.1"
// Install Huvermann.Extension.DiNameResolving as a Cake Addin #addin nuget:?package=Huvermann.Extension.DiNameResolving&version=1.0.1 // Install Huvermann.Extension.DiNameResolving as a Cake Tool #tool nuget:?package=Huvermann.Extension.DiNameResolving&version=1.0.1
Extensions.DiNameResolving
Lightweight DI extension to add names to class registrations.
The purpose of this extension is to provide a simple way to create a factory class that can resolve instances by name.
DI-Container registration example:
public static class ShelterRegistration
{
public static IServiceCollection RegisterShelter(this IServiceCollection services)
{
// Register the extension
services.AddNamedServiceRegistration();
// Register the factory.
services.AddTransient<IServiceByNameFactory<IAnimalInterface>, ServiceByNameFactory<IAnimalInterface>>();
// Register by name.
services.AddTransientByName<IAnimalInterface, CatClass>("Cat");
services.AddTransientByName<IAnimalInterface, DogClass>("Dog");
// Register the class that uses the factory.
services.AddTransient<AnimalShelter>();
return services;
}
}
All animal classes implementing the same interface:
public interface IAnimalInterface
{
public string DoWork(string input);
public string KindOfAnimal();
}
public class DogClass : IAnimalInterface
{
public string DoWork(string input)
{
return "Wuff";
}
public string KindOfAnimal()
{
return "Dog";
}
}
public class CatClass : IAnimalInterface
{
public string DoWork(string input)
{
return "Miauuu";
}
public string KindOfAnimal()
{
return "Cat";
}
}
Now we want to inject the ServiceByNameFactory to the AnimalShelter-Class And use them:
using Huvermann.Extension.DiNameResolving;
namespace Huvermann.Extensions.DiNameResolving.ServiceFactories.Playground
{
public class AnimalShelter
{
private IServiceByNameFactory<IAnimalInterface> _animalfactory;
public AnimalShelter(IServiceByNameFactory<IAnimalInterface> animalfactory)
{
_animalfactory = animalfactory;
}
public void CreateSomeAnimals()
{
var dog = _animalfactory.GetServiceByName("Dog");
Console.WriteLine(dog.KindOfAnimal());
dog.DoWork("Something");
var cat = _animalfactory.GetServiceByName("Cat");
Console.WriteLine(cat.KindOfAnimal());
cat.DoWork("Something");
}
}
}
It is also possible to register classes as singleton and scoped or mix all those flavours.
Example:
services.AddScopedByName<IAnimalInterface, DogClass>("Dog");
services.AddSingletonByName<IAnimalInterface, CatClass>("Cat");
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Microsoft.Extensions.DependencyInjection (>= 6.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Added Sigleton and Scoped registration