浅析依赖注入框架Autofac的使用

2019-12-26 13:18:05王冬梅

 

复制代码
builder.RegisterType<SqlDatabase>().As<IDatabase>();

 

通过AS可以让DatabaseManager类中通过构造函数依赖注入类型相应的接口。

Build()方法生成一个对应的Container实例,这样,就可以通过Resolve解析到注册的类型实例。

同样地,如果你修改数据库类型注册为:

 

复制代码
builder.RegisterType<OracleDatabase>().As<IDatabase>();

 

运行结果:

浅析依赖注入框架Autofac的使用

6)显然以上的程序中,SqlDatabase或者OracleDatabase已经暴露于客户程序中了,现在我想将该类型选择通过文件配置进行读取。

Autofac自带了一个Autofac.Configuration.dll 非常方便地对类型进行配置,避免了程序的重新编译。

修改App.config:

 

复制代码
<configuration> 
  <configSections> 
    <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/> 
  </configSections> 
  <autofac defaultAssembly="AutofacDemo"> 
    <components> 
      <component type="AutofacDemo.SqlDatabase, AutofacDemo" service="AutofacDemo.IDatabase" /> 
    </components> 
  </autofac> 
</configuration>

 

通过Autofac.Configuration.SectionHandler配置节点对组件进行处理。

对应的客户端程序改为:

 

复制代码
var builder = new ContainerBuilder(); 
builder.RegisterType<DatabaseManager>(); 
builder.RegisterModule(new ConfigurationSettingsReader("autofac"));