ASP.NET 中Autofac的使用

    技术2022-07-12  71

    第一步:引入nuget包

    Install-Package Autofac

    Install-Package Autofac.MVC5 

    Install-Package Autofac.WebApi2

    第二步:Autofac容器工厂

    /// <summary> /// Autofac容器工厂 /// </summary> public class AutofacFactory { /// <summary> /// Autofac容器对象 /// </summary> private static IContainer _container; /// <summary> /// 注册Autofac容器工厂 /// </summary> public static void register() { //初始化 var builder = new ContainerBuilder(); // 注入MVC 控制器 builder.RegisterControllers(Assembly.GetCallingAssembly()).PropertiesAutowired(); // 注入WebApi 控制器 builder.RegisterApiControllers(Assembly.GetCallingAssembly()).PropertiesAutowired(); // 获取bin文件夹中所有dll var dataAccess = AppDomain.CurrentDomain.GetAssemblies(); // 注入Repository builder.RegisterAssemblyTypes(dataAccess) .Where(t => t.Name.EndsWith("Repository")) .AsImplementedInterfaces(); // 注入Service builder.RegisterAssemblyTypes(dataAccess) .Where(t => t.Name.EndsWith("Service")) .AsImplementedInterfaces(); //创建容器 _container = builder.Build(); //设置MVC依赖注入 DependencyResolver.SetResolver(new AutofacDependencyResolver(_container)); //设置WebApi依赖注入 GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(_container); } /// <summary> /// 从Autofac容器获取对象 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public static T Get<T>() { return _container.Resolve<T>(); } }

    第三步:在 Global.asax 中注入 Autofac容器工厂实现自动注入

    AutofacFactory.register();

    第四步:使用

    /// <summary> /// 测试Api控制器 /// </summary> public class TestController : ApiController { /// <summary> /// 测试业务 /// </summary> ITestService test; /// <summary> /// DI /// </summary> /// <param name="service"></param> public TestController(ITestService service) { test = service; } /// <summary> /// 测试方法 /// </summary> /// <returns></returns> [HttpGet] public string show() { test.saveTran("张三", "张道陵"); return test.go(); } }

    注意:需要注入的类库生成的dll文件一定要放在对应启动项目的bin文件夹下

    Processed: 0.026, SQL: 9