Dependency Injection in .NET Core Using Autofac

Official Documentation

https://autofaccn.readthedocs.io/zh/latest/index.html

Creating a .NET Core Console Application

Registering Types – Example One

  1. Define an interface IPerson

    public interface IPerson
    {
        void Introduce();
    }
    
  2. Implemant the interface with a Worker class

    public class Worker : IPerson
    {
        public void Introduce()
        {
            Console.WriteLine("I am a worker");
        }
    }
    
  3. Create a registration class and configure the container

    public class BasicRegistrations
    {
        /// <summary>
        /// Register and resolve by type
        /// </summary>
        public static void ExecuteTypeRegistration()
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<Worker>().As<IPerson>();
            var container = builder.Build();
            var provider = new AutofacServiceProvider(container);
            var person = provider.GetService<IPerson>();
            person.Introduce();
            Console.ReadKey();
        }
    }
    
  4. Run the application

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("autofac demo");
            BasicRegistrations.ExecuteTypeRegistration();
        }
    }
    

    Output:

    Program output showing "I am a worker"

Assembly Scanning for Automatic Registration

Registering dozens of components manually is impractical. Assembly scanning allows automatic discovery and registration.

Example Two

  1. Define a marker interface for atuomatic injection

    /// <summary>
    /// Implementing this interface enables automatic dependency registration
    /// </summary>
    public interface IAutoRegister
    {
    }
    
  2. Create the scanning logic in a dedicated class

    public class AssemblyScanner
    {
        /// <summary>
        /// Build a service provider by scanning assemblies
        /// </summary>
        public AutofacServiceProvider Build()
        {
            var builder = new ContainerBuilder();
            Type markerType = typeof(IAutoRegister);
            var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToArray();
    
            builder.RegisterAssemblyTypes(assemblies)
                .Where(t => markerType.IsAssignableFrom(t) && !t.IsAbstract)
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();
    
            var container = builder.Build();
            return new AutofacServiceProvider(container);
        }
    }
    
  3. Implement both IPerson and IAutoRegister in a Teacher class

    class Teacher : IPerson, IAutoRegister
    {
        public void Introduce()
        {
            Console.WriteLine("I am a teacher");
        }
    }
    
  4. Udpate the entry point to use the scanner

    static void Main(string[] args)
    {
        Console.WriteLine("autofac demo");
        BasicRegistrations.ExecuteAssemblyScan();
    }
    

    Output:

    Program output showing "I am a teacher"

References

https://stackoverflow.com/questions/26957519/ef-core-mapping-entitytypeconfiguration

Tags: .NET Core autofac Dependency Injection C# Assembly Scanning

Posted on Fri, 11 Sep 2026 16:39:24 +0000 by Brad420