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 }
(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"); }