activiti tasklistener中注入service為空_netcore 使用 Autofac進行物件注入
阿新 • • 發佈:2021-02-01
技術標籤:activiti tasklistener中注入service為空
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().As();//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; /// /// 建構函式 /// /// public TestController(ITestService testService) { _testService = testService; } [HttpGet] public string Hello() { var str= _testService.Hello(); return str; } }
執行