国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

autofac使用筆記

2019-11-17 01:45:37
字體:
來源:轉載
供稿:網友

autofac使用筆記

在之前的項目中用來解耦的使用的輕型IOC框架是unity,它的使用也是很方便的提供在之前的文章的也提到過它的使用方式,但是使用久了之后發現了它的不足之處就是需要配置xml文件來對應的接口和實現的關系??傆X這種不夠靈活。因為隨著項目的進行需要配置的接口和實現會越來越多。配置起來很是麻煩還容易出錯。我在想有沒有別的IOC框架能夠一勞永逸的實現解耦而不是通過配置呢。

答案是肯定的。 那就是autofac ,這是我在Github 上找到的輕型的IOC框架。它的使用方式也特別的簡單。原理呢簡單來說。是通過遍歷程序集來實現的(PS:當然它也是支持通過配置文件來實現的這里我就不詳細說了)。詳細的信息呢大家可以輕易autofac 的官網下載源碼來看。網址是http://autofac.org/ 它的最大特色呢就是約定實現。什么是約定實現。意思就是說你的接口和現實之間需要一個默認的約定。就跟創建控制器一樣必須以controller來結尾一樣。

下面我就直接貼代碼了這個是我做的一個dome 是在在MVC5 webapi 中實現的注入

當然在是用之前你需要在安裝幾個包。直接nuget就行了一共需要三個包

按順序說明下

step1PM> Install-Package Autofac -Version 3.5.0 直接在包管理里面輸入這個命令 nuget地址是https://www.nuget.org/packages/Autofac/3.5.0

step2PM> Install-Package Autofac.Mvc5 添加這個包 nuget地址是https://www.nuget.org/packages/Autofac.Mvc5/

step3PM> Install-Package Autofac.WebApi 最后是添加autofac webapi的包https://www.nuget.org/packages/Autofac.WebApi/

using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Web;using System.Web.Http;using System.Web.Mvc;using Autofac;using Autofac.Integration.Mvc;using Autofac.Integration.WebApi;namespace WebApiIoc.App_Start{    public static class autofaconfig    {        public static void Initialize(HttpConfiguration config)        {            Initialize(config, RegisterServices(new ContainerBuilder()));//初始化容器        }        public static void Initialize(HttpConfiguration config, IContainer container)        {            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);//注冊api容器            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));//注冊MVC容器        }        PRivate static IContainer RegisterServices(ContainerBuilder builder)        {            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());//注冊api容器的實現            builder.RegisterControllers(Assembly.GetExecutingAssembly());//注冊mvc容器的實現            builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())//查找程序集中以services結尾的類型                .Where(t => t.Name.EndsWith("Services"))                .AsImplementedInterfaces();            builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())//查找程序集中以Repository結尾的類型           .Where(t => t.Name.EndsWith("Repository"))           .AsImplementedInterfaces();            return builder.Build();//返回容器        }    }}

 這個是autofac的配置文件。

下面是webapiconfig文件

using System;using System.Collections.Generic;using System.Linq;using System.Web.Http;using WebApiIoc.App_Start;namespace WebApiIoc{    public static class WebApiConfig    {        public static void Register(HttpConfiguration config)        {            // Web API configuration and services            // Web API routes            config.MapHttpAttributeRoutes();            config.Routes.MapHttpRoute(                name: "DefaultApi",                routeTemplate: "api/{controller}/{id}",                defaults: new { id = RouteParameter.Optional }            );            //注冊webapi和mvc容器            autofaconfig.Initialize(config);        }    }}

最后是global文件

using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Web;using System.Web.Http;using System.Web.Mvc;using System.Web.Optimization;using System.Web.Routing;using Autofac;using Autofac.Integration.Mvc;using Autofac.Integration.WebApi;using WebApiIoc.App_Start;namespace WebApiIoc{    public class WebApiapplication : System.Web.HttpApplication    {        protected void Application_Start()        {            AreaRegistration.RegisterAllAreas();            GlobalConfiguration.Configure(WebApiConfig.Register);            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);            RouteConfig.RegisterRoutes(RouteTable.Routes);            BundleConfig.RegisterBundles(BundleTable.Bundles);        }    }}

在apicontroller和MVCcontroller里面都是通過構造函數注入的方式實現的下面貼出來代碼

這個是MVC

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using Iservices;using Microsoft.Ajax.Utilities;namespace WebApiIoc.Controllers{    public class HomeController : Controller    {        private IOneServices _oneServices;                public HomeController(IOneServices oneServices)        {            _oneServices = oneServices;        }        public ActionResult Index()        {            var sum = _oneServices.sum(10, 20);            var aa = DependencyResolver.Current.GetService<IOneServices>();            ; ViewBag.Title = sum;            return View();        }    }}

這個是webapi

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Http;using System.Web.Http;using System.Web.Http.Dependencies;using Autofac;using Autofac.Integration.WebApi;using Iservices;namespace WebApiIoc.Controllers{    public class ValuesController : ApiController    {        private IOneServices _oneServices;        public ValuesController(IOneServices oneServices)                {            _oneServices = oneServices;        }        // GET api/values        public IEnumerable<string> Get()        {            var sum = _oneServices.sum(1, 2);return new string[] { "value1", "value2" };        }        // GET api/values/5        public string Get(int id)        {            return "value";        }        // POST api/values        public void Post([FromBody]string value)        {        }        // PUT api/values/5        public void Put(int id, [FromBody]string value)        {        }        // DELETE api/values/5        public void Delete(int id)        {        }    }}

最后說明下如果你沒有通過構造函數注入你又想獲取實例的話怎么做呢。下面分別說明

MVC

          var OneServices = DependencyResolver.Current.GetService<IOneServices>();

Webapi

            IDependencyScope dependencyScope = this.Request.GetDependencyScope();            ILifetimeScope requestLifetimeScope = dependencyScope.GetRequestLifetimeScope();            var customerService = requestLifetimeScope.Resolve<IOneServices>();

其他的比如屬性注入和方法注入就不在這寫了。這里只是寫的常用的簡單的注冊方式,后面我會把這部分注冊的方式給補上.

基本到這里整個注冊流程就完事了。以上寫的不足之處請指出我會修正。希望和大家共同成長.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 循化| 即墨市| 沽源县| 余干县| 探索| 龙陵县| 襄垣县| 泗阳县| 洞头县| 石城县| 隆子县| 惠东县| 金坛市| 托克逊县| 小金县| 英德市| 巧家县| 南部县| 东明县| 沁阳市| 余江县| 登封市| 库车县| 剑阁县| 乾安县| 六枝特区| 平度市| 邯郸县| 中西区| 长沙县| 且末县| 兰州市| 炉霍县| 南雄市| 安塞县| 许昌市| 石泉县| 安图县| 莫力| 石首市| 诸城市|