Autofac如何实现复杂依赖注入的简单配置?
摘要:今天记录一下学习Autofac的过程。 之前对IoC与DI一直很迷糊,今天研究了前辈们的文章后,才对IoC和DI有了一个初步的了解。感谢前辈们的无私奉献! 文章地址: 依赖注入和控制反转的理解,写的太好了。 【第二章】 IoC 之 2.1
今天记录一下学习Autofac的过程。
之前对IoC与DI一直很迷糊,今天研究了前辈们的文章后,才对IoC和DI有了一个初步的了解。感谢前辈们的无私奉献!
文章地址:
依赖注入和控制反转的理解,写的太好了。
【第二章】 IoC 之 2.1 IoC基础 ——跟我学Spring3
什么鬼?明明是记录Autofac的基本使用。。。
好吧,回到主题。
首先,构建好一个时间输出的程序:
public interface IOutput
{
void Write(string content);
}
public class ConsoleOutput : IOutput
{
public void Write(string content)
{
Console.WriteLine(content);
}
}
public interface IDateWrite
{
void WriteDate();
}
public class TodayWrite : IDateWrite
{
private IOutput _output;
public TodayWrite(IOutput output)
{
this._output = output;
}
public void WriteDate()
{
this._output.Write(DateTime.Now.ToShortDateString());
}
}
class Program
{
static void Main(string[] args)
{
//创建一个输出对象
ConsoleOutput consoleOutput = new ConsoleOutput();
//创建一个日期输出对象,并通过构造函数注入日期输出对象所依赖的输出对象
TodayWrite todayWrite = new TodayWrite(consoleOutput);
//执行输出日期方法
todayWrite.WriteDate();
Console.Read();
}
}
以上是原始实现方式,现在看,它拥有一个合理的关于依赖关系的结构,那么开始搭配Autofac来一起使用吧。
首先,添加下Autofac的引用。
打开工具->选择NuGet包管理器->管理解决方案的NuGet程序包
安装后,不要忘记引用Autofac
using Autofac;
接下来重构下 Program 类
class Program
{
private static IContainer Container { get; set; }
static void Main(string[] args)
{
var builder = new ContainerBuilder();
builder.RegisterType<ConsoleOutput>().As<IOutput>();
builder.RegisterType<TodayWrite>().As<IDateWrite>();
Container = builder.Build();
WriteDate();
Console.Read();
}
static void WriteDate()
{
using (ILifetimeScope scope = Container.BeginLifetimeScope())
{
var write = scope.Resolve<IDateWrite>();
write.WriteDate();
}
}
}
最后贴上 Autofac 的文档地址 :Autofac
