Autofac自動注入是通過名稱約定來實作依賴注入
ps:本demo介面層都以“I”開頭,以“Service”結尾,服務層實作都以“Service”結尾,
為什么要實作自動注入
大多時候,我們都是 以下方式進行依賴注入
public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); //初始化容器 var builder = new ContainerBuilder(); //管道寄居 builder.Populate(services); builder.RegisterType<TestService>().As<ITestService>();//UserService注入到IUserService //構造 ApplicationContainer = builder.Build(); //將AutoFac反饋到管道中 return new AutofacServiceProvider(ApplicationContainer); }
隨著業務的增長,介面跟實作類會越來越多,還需要手動一個個的注冊依賴項,有時候會出現忘了寫配置,導致程式報錯,如果是多人開發,可能還會導致代碼沖突,后期維護起來相對來說比較麻煩,
實用Autofac自動注入
public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); //初始化容器 var builder = new ContainerBuilder(); //管道寄居 builder.Populate(services); //業務邏輯層所在程式集命名空間 Assembly service = Assembly.Load("NetCoreDemo.Service"); //介面層所在程式集命名空間 Assembly repository = Assembly.Load("NetCoreDemo.Repository"); //自動注入 builder.RegisterAssemblyTypes(service, repository) .Where(t => t.Name.EndsWith("Service")) .AsImplementedInterfaces(); //構造 ApplicationContainer = builder.Build(); //將AutoFac反饋到管道中 return new AutofacServiceProvider(ApplicationContainer); }
簡單測驗
創建IUserService介面
public interface ITestService { string Hello(); }
創建UserService實作類
public class TestService : ITestService { public string Hello() { return "Hello Word"; } }
創建TestController控制器
通過控制器的構造方法注入ITestService介面
[Route("api/test")] [ApiController] public class TestController : Controller { private readonly ITestService _testService; /// <summary> /// 建構式 /// </summary> /// <param name="testService"></param> public TestController(ITestService testService) { _testService = testService; } [HttpGet] public string Hello() { var str= _testService.Hello(); return str; } }
運行

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/86505.html
標籤:.NET Core
