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
{
publicstaticclass AutofacExt
{
privatestatic IContainer _container;
publicstaticvoid InitAutofac()
{
// Add the configuration to the ConfigurationBuilder.varconfig =new ConfigurationBuilder();
config.AddJsonFile("autofac.json");
// Register the ConfigurationModule with Autofac.varmodule =new ConfigurationModule(config.Build());
varbuilder =new ContainerBuilder();
builder.RegisterModule(module);
// Set the dependency resolver to be Autofac._container = builder.Build();
}
///<summary>/// 从容器中获取对象
///</summary>///<typeparam name="T"></typeparam>publicstaticT GetFromFac()
{
return_container.Resolve();
// return (T)DependencyResolver.Current.GetService(typeof(T)); }
publicstaticT GetFromFac(string name)
{
return_container.ResolveNamed(name);
}
}
}
客户端调用
publicinterface IOutput
{
voidWrite(stringcontent); }
publicclass ConsoleOutput : IOutput
{
publicvoidWrite(string content)
{
Console.WriteLine(content);
}
}class Program
{
staticvoidMain(string[] args)
{
AutofacExt.InitAutofac();
varwriter =AutofacExt.GetFromFac();
writer.WriteDate();
Console.ReadKey();
}
}
json配置文件配置
Autofac.json
{
"defaultAssembly": "autofacConsole",
"components": [
{
"type": "autofacConsole.ConsoleOutput, autofacConsole",
"services": [
{
"type": "autofacConsole.IOutput,autofacConsole" }
],
"instanceScope": "single-instance",
"injectProperties":true }
]
}
设置为如果较新则复制