Skip to content

Instantly share code, notes, and snippets.

@omerfarukz
Last active September 3, 2018 14:44
Show Gist options
  • Save omerfarukz/5a691037f1cc5230773ab03d8b26fa92 to your computer and use it in GitHub Desktop.
Save omerfarukz/5a691037f1cc5230773ab03d8b26fa92 to your computer and use it in GitHub Desktop.
public static class ServiceCollectionExtensions
{
private static MethodInfo _method;
public static void ConfigureTypeNamed<T>(this ServiceCollection serviceCollection, IConfigurationRoot configuration)
=> ConfigureTypeNamed(serviceCollection, configuration, typeof(T));
public static void ConfigureTypeNamed(this ServiceCollection serviceCollection, IConfigurationRoot configuration, Type type)
{
if (_method == null)
{
var extensionMethod = typeof(OptionsConfigurationServiceCollectionExtensions).GetMethod("Configure", new Type[] { typeof(ServiceCollection), typeof(IConfiguration) });
_method = extensionMethod.MakeGenericMethod(type);
}
_method.Invoke(null, new object[] { serviceCollection, configuration.GetSection(type.FullName) });
}
}
@omerfarukz
Copy link
Author

string binPath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin");

@omerfarukz
Copy link
Author

static void Main(string[] args)
{
// #1 Configuration
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", true, true)
.Build();

        // #2   CoreDI
        var serviceCollection = new ServiceCollection();
        serviceCollection.AddTransient<Bootstrapper>();
        serviceCollection.ConfigureTypeNamed<ProgramConfiguration>(configuration);

        // #3   Autofac
        var containerBuilder = new ContainerBuilder();
        containerBuilder.Populate(serviceCollection);

        string binPath = System.AppDomain.CurrentDomain.BaseDirectory;// System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin");
        AssemblyLoader.TryLoadAllAssemblies(Path.GetDirectoryName(binPath)); // todo change location

        containerBuilder.RegisterAssemblyModules(AppDomain.CurrentDomain.GetAssemblies());


        var container = containerBuilder.Build();
        var serviceProvider = new AutofacServiceProvider(container);


        var instance = serviceProvider.GetService<Bootstrapper>();
        instance.PrintConfiguration();

        var printers = container.Resolve<IEnumerable<IPrinter>>();
        foreach (var item in printers)
        {
            item.Print("here");
        }
        Console.WriteLine("Finished");
        Console.ReadKey();
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment