在使用autofac这个DI工具时,我们一般使用的是构造方法注入,而dotnetcore的标准框架里也集成了构造方法注入,而属性注入在一些场景下,表现的更为灵活,像java的spring框架里就有@Autowired注解来实现属性的注入,而autofac这个框架也提示了属性自动注入的方式(PropertiesAutowired)。
下面准备dao和bll层代码,bll对dao层有引用
public class UserRepository { public int GetUserId() { return 1; } } public class UserService { public UserRepository _userRepository { get; set; } public int GetUserId() { if (_userRepository != null) { return _userRepository.GetUserId(); } return 0; } }
在单元测试里进行属性注入的验证
[Fact] public void Test1() { ContainerBuilder builder = new ContainerBuilder(); builder.RegisterType<UserService>().PropertiesAutowired();//它里面的属性自动注册 builder.RegisterType<UserRepository>(); var container = builder.Build(); UserService userService = container.Resolve<UserService>(); Assert.Equal(1, userService.GetUserId()); }
经过测试我们发现,dao层的GetUserId方法被正确返回了。