using Microsoft.Extensions.DependencyInjection;
public static void Main()
using (var rootServiceProvider = BuildServices())
using (var rootScope = rootServiceProvider.CreateScope())
var provider = rootScope.ServiceProvider;
var genericProductFileCreator = provider.GetRequiredService<IImportFileCreator<Product>>();
var genericAssetFileCreator = provider.GetRequiredService<IImportFileCreator<Asset>>();
genericProductFileCreator.TestMethod();
genericAssetFileCreator.TestMethod();
public static ServiceProvider BuildServices(Action<IServiceCollection> configure = null) {
var services = new ServiceCollection();
services.AddSingleton(typeof(IImportFileCreator<>), typeof(GenericImportFileCreator<>));
return services.BuildServiceProvider();
public interface IImportFileCreator<TEntity>
TEntity Something { get; set; }
public class GenericImportFileCreator<TEntity> : IImportFileCreator<TEntity>
public TEntity Something {get; set; }
public virtual void TestMethod()
Console.WriteLine("Generic import file creator handling " + typeof(TEntity).FullName + " entities");