Autofacl自动化注册

1.自动注入MVC控制器

   (1)初始化自动化注册服务 RegisterService

    需引用:Autofac,Autofac.Integration.Mvc 这两个程序集

 1 public class RegisterService
 2     {
 3         public static ContainerBuilder Register()
 4         {
 5             var builder = new ContainerBuilder();
 6             var baseType = typeof(IDependency);
 7             var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToList();
 8             var allServices = assemblys.SelectMany(s => s.GetTypes())
 9                 .Where(p => baseType.IsAssignableFrom(p) && p != baseType);
10 
11             builder.RegisterControllers(assemblys.ToArray());
12 
13             builder.RegisterAssemblyTypes(assemblys.ToArray()).Where(t => baseType.IsAssignableFrom(t) && t != baseType)
14                 .AsImplementedInterfaces().InstancePerLifetimeScope();
15             
16             builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerDependency();
17             return builder;
18         }
19     }
View Code

   (2) Global中启动该服务

     var builder = RegisterService.Register();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(builder.Build()));

2.手动指定注入的实例类型

         var builder = new ContainerBuilder();

         builder.RegisterType<DBBase>();

         builder.RegisterType<SqlRepository>().As<IRepository>();

3. 通过Autofac文档中 通过 WebConfig配置实现自动化注入

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

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
  </configSections>
  <autofac defaultAssembly="AutofacDemo">
    <components>
      <component type="AutofacDemo.Service, AutofacDemo" service="AutofacDemo.IService,AutofacDemo" />
    </components>
  </autofac>
</configuration>
配置文件

  使用案例:

var builder = new ContainerBuilder(); 
builder.RegisterType<DatabaseManager>(); 
builder.RegisterModule(new ConfigurationSettingsReader("autofac")); 
using (var container = builder.Build()) 
{ 
    var manager = container.Resolve<DatabaseManager>(); 
    manager.Search("TestA"); 
} 
View Code

 

        

posted @ 2015-12-15 00:44  ToBeStrong  阅读(779)  评论(2)    收藏  举报