Autofac依赖注入应用
发布时间:2020-12-14 05:06:51 所属栏目:百科 来源:网络整理
导读:可用依赖注入的类库很多,这里拿github最火的 Autofac 为例介绍使用方法。这里以上篇博客为例运用设计原则编写可测试性的代码 Autofac思想介绍 Autofac 为我们提供一容器,我们先将类型注册到容器中,在需要时通过服务直接取类型对象。 Autofac 提供了多种注
可用依赖注入的类库很多,这里拿github最火的 Autofac思想介绍
Autofac注入方法类型注册方法/* * 第一种注册方式:RegisterType对ProductService类型注册,注册的类型可用通过Resolve得到ProductService实例 * builder.RegisterType<ProductRepository>().As<IProductRepository>();通过As可用让ProductService类通过构造函数依赖注入相应的的接口 * Build()方法返回Container实例 */ var builder = new ContainerBuilder(); builder.RegisterType<ProductService>(); builder.RegisterType<DictionaryCacheStorage>().As<ICacheStorage>(); builder.RegisterType<ProductRepository>().As<IProductRepository>(); Container = builder.Build(); 取对象方法 通过配置文件注入//第二中通过json配置文件注入 var builder = new ContainerBuilder(); builder.RegisterType<ProductService>(); builder.RegisterType<DictionaryCacheStorage>().As<ICacheStorage>(); var config = new ConfigurationBuilder(); config.AddJsonFile("autofac.json"); var module = new ConfigurationModule(config.Build()); builder.RegisterModule(module); Container = builder.Build(); 注意这里需引用包 通过Module注入这种注入更灵活,可以写入逻辑
public class ProduceServiceModule : Module { protected override void Load(ContainerBuilder builder) { builder.RegisterType<ProductService>(); var config = new ConfigurationBuilder(); config.AddJsonFile("autofac.json"); var module = new ConfigurationModule(config.Build()); builder.RegisterModule(module); } }
//3 模块注册,可以控制注入逻辑 var builder = new ContainerBuilder(); builder.RegisterType<DictionaryCacheStorage>().As<ICacheStorage>(); builder.RegisterModule(new ProduceServiceModule()); Container = builder.Build(); 通过unit test 构建单元测试
[TestMethod] public void Test_Find_Product_by_CategoryName_Hats() { IList<Product> products; //每次请求得到一个新的实例,如不使用两个方法得到的实例相同 using (var scope = Container.BeginLifetimeScope()) { var productService = Container.Resolve<ProductService>(); string categoryName = "Hats"; products = productService.GetAllProductsIn(categoryName); } Assert.AreEqual<int>(3,products.Count); } 结尾下篇介绍Autofac集成webform和mvc项目 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |