我对IoC容器的理解
依赖注入相信大部分人都了解了,下面用个简单的代码再描述一下:
public interface IOutput
{
void Print(string info);
}
public class ConsoleOutput : IOutput
{
public void Print(string info)
{
Console.WriteLine("Console print: {0}", info);
}
}
public class Client
{
private IOutput _output;
//构造函数注入
public Client(IOutput output)
{
this._output = output;
}
public void Print(string info)
{
this._output.Print(info);
}
}
然后什么时候注入具体的类,我们一般都会再定义一个Assembler来负责决定具体类,这时必然会和ConsoleOutput有依赖关系产生,或者灵活一点可以采用反射加配置的方式,但是代码必然将变复杂,而且需要考虑到许多情况。而IoC容器就是为了解决这样的问题的。下面使用Autofac做例子:
static void Main(string[] args)
{
var builder = new ContainerBuilder();
//注册当前Assembly下所有以Output结尾的类
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.Where(n => n.Name.EndsWith("Output"))
.AsImplementedInterfaces();
//注册Client
builder.RegisterType<Client>();
var container = builder.Build();
var client = container.Resolve<Client>();
client.Print("I'm heqichang");
}
引入Autofac之后基本可以不用你再编写代码来注入Client,Autofac帮助你自动完成了这一些事。所以,你只要编写好你的接口、具体类和你要注入的类就行了,剩下由IoC容器来组合运行。
参考链接: AutoFac AutoFac使用方法总结
blog comments powered by Disqus