大多時候我們采用一下方式進行依賴注入
隨着業務的增長,接口跟實現類會越來越多,還需要手動一個個的注冊依賴項,有時候會出現忘了寫配置,導致程序報錯,如果是多人開發,可能還會導致代碼沖突,后期維護起來相對來說比較麻煩。
使用Autofac自動注入
1、安裝Autofac.Extensions.DependencyInjection
2、修改Program.cs
1 public static IHostBuilder CreateHostBuilder(string[] args) => 2 Host.CreateDefaultBuilder(args) 3 .ConfigureWebHostDefaults(webBuilder => 4 { 5 webBuilder.UseStartup<Startup>(); 6 }) 7 .UseServiceProviderFactory(new AutofacServiceProviderFactory());
3、在Startup.cs中添加ConfigureContainer方法
1 public void ConfigureContainer(ContainerBuilder builder) 2 { 3 builder.RegisterAssemblyTypes(typeof(Program).Assembly) 4 .Where(x => x.Name.EndsWith("service", StringComparison.OrdinalIgnoreCase)).AsImplementedInterfaces(); 5 }
接口層以I開頭Service層都要以Service為結尾。
測試:
1 public interface IArticleService 2 { 3 IEnumerable<Article> QueryArticle(); 4 5 int SaveArticle(Article article); 6 7 Article GetArticleById(int Id); 8 9 Page<Article> GetArticlePage(int page, int size, string searchval); 10 11 int DelArticle(int Id); 12 }
1 public class ArticleService : BaseService, IArticleService 2 { 3 /// <summary> 4 /// 查詢文章 5 /// </summary> 6 /// <returns></returns> 7 public Article GetArticleById(int Id) 8 { 9 var sql = Sql.Builder.Append("SELECT * FROM MST_ARTICLE WHERE Id=@id", new 10 { 11 id = Id 12 }); 13 return database.SingleOrDefault<Article>(sql); 14 } 15 }
在控制器中注入IArticleService
1 [ApiController] 2 [Route("api/[controller]/[action]")] 3 public class ArticleController : Controller 4 { 5 private IArticleService _articleService; 6 7 private readonly IMapper _mapper; 8 9 public ArticleController(IArticleService articleService, IMapper mapper) 10 { 11 _articleService = articleService; 12 _mapper = mapper; 13 }