最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#?利用Autofac批量接口注入依賴的問題小結(jié)

 更新時間:2021年12月28日 09:56:29   作者:CoolDog;  
這篇文章主要介紹了C#?利用Autofac批量接口注入依賴的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

背景:

  本人在一位大佬的Colder框架中看到了這個接口注入,然后呢就想學(xué)習(xí)一下ioc思想與di設(shè)計模式。此寫法給我的感覺就是

非常的 優(yōu)雅 ,優(yōu)雅永不過時。關(guān)于接口注入具體是什么可以最后推薦的地址。話不多說,開擼。

安裝:

  打開nuget管理工具,將我下面標(biāo)紅色的包都進行安裝(注:千萬別安裝錯了,按照名字不差的安裝)

  

使用:

  我們新建一個DI的文件夾,在文件夾中增加一個接口:IDependency.cs

namespace Coldairarrow
{
    /// <summary>
    /// 注入標(biāo)記
    /// </summary>
    public interface IDependency
    {

    }
}

    先不要問問什么后面會解釋。

    后面:其實。。就是這個依賴注入的一個原理吧。根據(jù)這個接口去找依賴的實現(xiàn)。

    推薦去這個地址看一下:http://www.fzitv.net/article/206284.htm

    好了,繼續(xù)分別新建Student.cs,StudentRepository.cs,IStudentRepository.cs三個類。StudentRepository.cs里面的具體業(yè)務(wù)根據(jù)需要自行修改,這里是為了測試使用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ByzkApi
{
    public  class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Graduation { get; set; }
        public string School { get; set; }
        public string Major { get; set; }
    }
}
using Coldairarrow;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ByzkApi
{
    public class StudentRepository : IStudentRepository,IDependency
    {
        public Student Add(Student item)
        {
            throw new NotImplementedException();
        }

        public bool Delete(int id)
        {
            throw new NotImplementedException();
        }

        public Student Get(int id)
        {
            return new Student() { Name = "張三" };
        }

        public IEnumerable<Student> GetAll()
        {
            throw new NotImplementedException();
        }

        public bool Update(Student item)
        {
            throw new NotImplementedException();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ByzkApi
{
    public interface IStudentRepository
    {
        IEnumerable<Student> GetAll();
        Student Get(int id);
        Student Add(Student item);
        bool Update(Student item);
        bool Delete(int id);

    }
}

注意:這里好好看一下StudentRepository 是實現(xiàn)了兩個接口分別是 IStudentRepositoryIDependency(注入標(biāo)記)

最關(guān)鍵的地方來了,我們打開項目啟動的函數(shù)Application_Start,然后注入一下接口依賴。

using Autofac;
using Autofac.Extras.DynamicProxy;
using Autofac.Integration.Mvc;
using Autofac.Integration.WebApi;
using ByzkApi.Controllers;
using ByzkApi.Interface;
using Coldairarrow;
using Microsoft.Extensions.DependencyInjection;
using System.Linq;
using System.Reflection;
using System.Web.Compilation;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace ByzkApi
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            //初始化Autofac
            InitAutofac(GlobalConfiguration.Configuration);


            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }




        private void InitAutofac(HttpConfiguration config)
        {
            var builder = new ContainerBuilder();


            var baseType = typeof(IDependency);

            //可以進行篩選如: Where(x => x.FullName.Contains("Coldairarrow"))
            var assemblys = BuildManager.GetReferencedAssemblies().Cast<Assembly>()
                .ToList();

            //自動注入IDependency接口,支持AOP,生命周期為InstancePerDependency
            builder.RegisterAssemblyTypes(assemblys.ToArray())
                .Where(x => baseType.IsAssignableFrom(x) && x != baseType)
                .AsImplementedInterfaces()
                .PropertiesAutowired()
                .InstancePerDependency()
                .EnableInterfaceInterceptors()
                .InterceptedBy(typeof(Interceptor));

            //注冊Controller
            builder.RegisterControllers(assemblys.ToArray())
                .PropertiesAutowired();
            builder.RegisterApiControllers(assemblys.ToArray()).PropertiesAutowired();
       
            //AOP
            builder.RegisterType<Interceptor>();
            builder.RegisterWebApiFilterProvider(config);

            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            var resolver = new AutofacWebApiDependencyResolver(container);
            GlobalConfiguration.Configuration.DependencyResolver = resolver;
            AutofacHelper.Container = container;
        }

    }
}

到此為止就已經(jīng)注入完成了~

使用:

    這個接口注入好了之后可以在普通的Controller使用,也可以在apiController進行使用,分別看一下效果,結(jié)束。

 Controller:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace ByzkApi.Controllers
{
    public class HomeController : Controller
    {
        readonly IStudentRepository repository;
        //構(gòu)造器注入
        public HomeController(IStudentRepository repository)
        {
            this.repository = repository;
        }



        public ActionResult Index()
        {

            var a = repository.Get(1);

            ViewBag.Title = a.Name;

            return View();
        }
    }
}

  ApiController:(如果想要多個接口只需要實現(xiàn)接口的時候進行繼承IDependency就可)

using ByzkApi.Interface;
using Coldairarrow.Web;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Http;

namespace ByzkApi.Controllers
{
    public class TestApiController : ApiController
    {
        readonly IStudentRepository repository;

        public ITest _test { get; }
        //構(gòu)造器注入
        public TestApiController(IStudentRepository repository, ITest test)
        {
            this.repository = repository;
            _test = test;
        }

        [HttpGet]
        public DataTable test(string sql)
        {
            repository.Get(1);
            var data = _test.GetTest("sql 語句");
            //repository.GetTest(sql);
            return data;
        }
    }
}

到此這篇關(guān)于C# 利用Autofac批量接口注入依賴的文章就介紹到這了,更多相關(guān)C# Autofac批量注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Treeview動態(tài)添加用戶控件傳值和取值的實例代碼

    Treeview動態(tài)添加用戶控件傳值和取值的實例代碼

    今天做了很好玩的樹,是treeview與用戶控件之間進行交互先看效果:
    2013-04-04
  • C# 靜態(tài)變量與靜態(tài)方法實例研究

    C# 靜態(tài)變量與靜態(tài)方法實例研究

    寫了一個翻譯英漢單詞辭典的小程序,發(fā)現(xiàn)在調(diào)用幾千次的時候速度很慢
    2011-11-11
  • Unity3D舊電視濾鏡shader的實現(xiàn)示例

    Unity3D舊電視濾鏡shader的實現(xiàn)示例

    這篇文章主要介紹了Unity3D舊電視濾鏡shader的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C#集合根據(jù)對象的某個屬性進行去重的代碼示例

    C#集合根據(jù)對象的某個屬性進行去重的代碼示例

    當(dāng)根據(jù)對象的Name屬性進行去重時,你可以使用以下三種方法:使用Distinct方法和自定義比較器、使用LINQ的GroupBy方法,以及使用HashSet,下面給大家介紹C#集合根據(jù)對象的某個屬性進行去重的代碼示例,感興趣的朋友一起看看吧
    2024-03-03
  • C#實現(xiàn)XML文檔的增刪改查功能示例

    C#實現(xiàn)XML文檔的增刪改查功能示例

    這篇文章主要介紹了C#實現(xiàn)XML文檔的增刪改查功能,結(jié)合實例形式分析了xml文檔的創(chuàng)建及C#針對xml文檔的加載及增刪改查等操作技巧,需要的朋友可以參考下
    2017-01-01
  • 基于C#編寫一個修改文件時間屬性的小工具

    基于C#編寫一個修改文件時間屬性的小工具

    這篇文章主要為大家詳細介紹了如何基于C#編寫一個修改文件時間屬性的小工具,可以批量修改文件的創(chuàng)建時間、最后訪問時間和最后修改時間,需要的可以參考下
    2024-11-11
  • C#雙緩沖實現(xiàn)方法(可防止閃屏)

    C#雙緩沖實現(xiàn)方法(可防止閃屏)

    這篇文章主要介紹了C#雙緩沖實現(xiàn)方法,結(jié)合實例形式分析了C#雙緩沖的具體步驟與相關(guān)技巧,可實現(xiàn)防止閃屏的功能,需要的朋友可以參考下
    2016-02-02
  • 在類庫或winform項目中打開另一個winform項目窗體的方法

    在類庫或winform項目中打開另一個winform項目窗體的方法

    這篇文章主要介紹了在類庫或winform項目中打開另一個winform項目窗體的方法,可以實現(xiàn)Winform項目間窗體的調(diào)用,在進行Winform項目開發(fā)中非常具有實用價值,需要的朋友可以參考下
    2014-11-11
  • 詳解C#中委托的概念與使用

    詳解C#中委托的概念與使用

    委托這個名字取的神乎其神的,但實質(zhì)是函數(shù)式編程,把函數(shù)作為參數(shù)傳遞給另一個參數(shù)。這篇文章主要為大家介紹一下C#中委托的概念與使用,需要的可以參考一下
    2023-02-02
  • C#機器入門學(xué)習(xí)之判斷日報是否合格詳解

    C#機器入門學(xué)習(xí)之判斷日報是否合格詳解

    這篇文章主要給大家介紹了關(guān)于C#機器入門學(xué)習(xí)之判斷日報是否合格的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評論

聂拉木县| 彰化市| 平远县| 墨玉县| 秦安县| 礼泉县| 会昌县| 武陟县| 平山县| 禹州市| 新昌县| 乡宁县| 石泉县| 麻江县| 克什克腾旗| 中江县| 密山市| 青川县| 嘉义县| 肃宁县| 德清县| 丹棱县| 墨脱县| 鸡泽县| 马鞍山市| 尤溪县| 苍南县| 锦屏县| 墨玉县| 石狮市| 广汉市| 道孚县| 东乌| 都江堰市| 乌海市| 满城县| 武川县| 来安县| 贺州市| 六盘水市| 滕州市|