1. 程式人生 > 其它 >activiti tasklistener中注入service為空_netcore 使用 Autofac進行物件注入

activiti tasklistener中注入service為空_netcore 使用 Autofac進行物件注入

技術標籤:activiti tasklistener中注入service為空

5420e6c14badac11b61f5645b4b2e0a5.png

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;        }    }

執行

00a93ca6e476faa3bf99811f51f4f1c8.png