在使用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方法被正確返回了。