autofac是比较简单易用的IOC容器。下面我们展示如何通过json配置文件,来进行控制反转。
需要用到以下程序集。可以通过nugget分别安装
Microsoft.Extensions.Configuration.dll
Microsoft.Extensions.Configuration.Json
Autofac.Configuration.dll
注意,项目目标框架最好设置为.NET Framework 4.6.1及以上。因为Microsoft.Extensions.Configuration.dll,依赖.NETStandard2.0
下表列出了 .NET Standard 的所有版本及其支持的平台

AutofacExt帮助类
- using Autofac;
- using Autofac.Configuration;
- using Microsoft.Extensions.Configuration;
- namespace autofacConsole
- {
- public static class AutofacExt
- {
- private static IContainer _container;
- public static void InitAutofac()
- {
- // Add the configuration to the ConfigurationBuilder.
- var config = new ConfigurationBuilder();
- config.AddJsonFile("autofac.json");
- // Register the ConfigurationModule with Autofac.
- var module = new ConfigurationModule(config.Build());
- var builder = new ContainerBuilder();
- builder.RegisterModule(module);
- // Set the dependency resolver to be Autofac.
- _container = builder.Build();
- }
- /// <summary>
- /// 从容器中获取对象
- /// </summary>
- /// <typeparam name="T"></typeparam>
- public static T GetFromFac<T>()
- {
- return _container.Resolve<T>();
- // return (T)DependencyResolver.Current.GetService(typeof(T));
- }
- public static T GetFromFac<T>(string name)
- {
- return _container.ResolveNamed<T>(name);
- }
- }
- }
客户端调用
- public interface IOutput
- {
- void Write(string content);
- }
- public class ConsoleOutput : IOutput
- {
- public void Write(string content)
- {
- Console.WriteLine(content);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- AutofacExt.InitAutofac();
- var writer =AutofacExt.GetFromFac<IOutput>();
- writer.WriteDate();
- Console.ReadKey();
- }
- }
json配置文件配置
Autofac.json
- {
- "defaultAssembly": "autofacConsole",
- "components": [
- {
- "type": "autofacConsole.ConsoleOutput, autofacConsole",
- "services": [
- {
- "type": "autofacConsole.IOutput,autofacConsole"
- }
- ],
- "instanceScope": "single-instance",
- "injectProperties": true
- }
- ]
- }
设置为如果较新则复制

参考资料:
https://github.com/autofac/Autofac
https://autofac.readthedocs.io/en/latest/getting-started/index.html
https://autofac.readthedocs.io/en/latest/configuration/xml.html