91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Web?API中如何使用Autofac實現依賴注入

發布時間:2022-03-14 09:11:31 來源:億速云 閱讀:234 作者:iii 欄目:開發技術

這篇文章主要介紹了Web API中如何使用Autofac實現依賴注入的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Web API中如何使用Autofac實現依賴注入文章都會有所收獲,下面我們一起來看看吧。

一、創建實體類庫

創建單獨實體類

創建DI.Entity類庫,用來存放所有的實體類,新建用戶實體類,其結構如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DI.Entity
{
    public class UserEntity
    {
        public int UserId { get; set; }

        public string UserName { get; set; }

        public int Sex { get; set; }

        public int Age { get; set; }
    }
}

二、創建倉儲接口類庫

新建DI.Interface類庫文件,存放所有接口,IUserRepository接口定義如下:

using DI.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DI.Interface
{
    public interface IUserRepository
    {
        List<UserEntity> GetUsers();
    }
}

三、創建倉儲接口的實現類庫

1、SQL Server數據庫實現

新建DI.SqlServer類庫文件,SqlServerUserRepository實現IUserRepository接口,SqlServerUserRepository類定義如下:

using DI.Entity;
using DI.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace DI.SqlServer
{
    public class SqlServerUserRepository : IUserRepository
    {
        public List<UserEntity> GetUsers()
        {
            List<UserEntity> list = new List<UserEntity>()
            {
              new UserEntity(){UserId=1,UserName="王五",Sex=2,Age=21},
              new UserEntity(){UserId=2,UserName="趙六",Sex=2,Age=23},
            };

            return list;
        }
    }
}

2、Oracle數據庫實現

新建DI.Oracle類庫文件,OracleUserRepository實現IUserRepository接口,OracleUserRepository類定義如下:

using DI.Entity;
using DI.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DI.Oracle
{
    public class OracleUserRepository : IUserRepository
    {
        public List<UserEntity> GetUsers()
        {
            List<UserEntity> list = new List<UserEntity>()
            {
              new UserEntity(){UserId=1,UserName="張三",Sex=1,Age=24},
              new UserEntity(){UserId=2,UserName="李四",Sex=1,Age=22},
            };

            return list;
        }
    }
}

四、新建WebAPI項目

1、安裝依賴項

通過NuGet安裝所需的依賴項:Autofac、Autofac.WebApi2(如果使用的是WebApi1,這里需要安裝WebApi)。

2、創建AutofacWebApiConfig類

AutofacWebApiConfig類定義如下:

using Autofac;
using Autofac.Integration.WebApi;
using DI.Interface;
using DI.SqlServer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Http;

namespace WebApi.AutofacDI
{
    public class AutofacWebApiConfig
    {
        public static void RegisterDependencies()
        {
            SetAutofacWebapi();
        }

        private static void SetAutofacWebapi()
        {
            ContainerBuilder builder = new ContainerBuilder();
            HttpConfiguration config = GlobalConfiguration.Configuration;
            // Register API controllers using assembly scanning.
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
            builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces();
            // 使用SQLserver數據庫實現
            builder.RegisterType<SqlServerUserRepository>().As<IUserRepository>().InstancePerRequest();
            var container = builder.Build();
            // Set the WebApi dependency resolver.
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }
    }
}

3、修改Global.asax文件

修改后的Global.asax文件定義如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using WebApi.AutofacDI;

namespace WebApi
{
    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);

            // 配置依賴注入
            AutofacWebApiConfig.RegisterDependencies();
        }
    }
}

4、創建Users控制器

創建UsersController類,并在構造函數中注入,UsersController類定義如下:

using DI.Entity;
using DI.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace WebApi.Controllers
{
    public class UsersController : ApiController
    {
        private IUserRepository _userRepository;

        /// <summary>
        /// 構造函數中注入
        /// </summary>
        /// <param name="userRepository"></param>
        public UsersController(IUserRepository userRepository)
        {
            this._userRepository = userRepository;
        }

        public IHttpActionResult Get()
        {
            return Json <List<UserEntity>>( _userRepository.GetUsers());
        }
    }
}

5、測試

啟動程序,然后在瀏覽器里面輸入:http://localhost:51157/api/users,結果如下:

Web?API中如何使用Autofac實現依賴注入

從結果中可以看出:這里使用的是SQLserver實現的。

修改AutofacWebApiConfig文件,用oracle實現,修改后的代碼如下:

using Autofac;
using Autofac.Integration.WebApi;
using DI.Interface;
using DI.Oracle;
using DI.SqlServer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Http;

namespace WebApi.AutofacDI
{
    public class AutofacWebApiConfig
    {
        public static void RegisterDependencies()
        {
            SetAutofacWebapi();
        }

        private static void SetAutofacWebapi()
        {
            ContainerBuilder builder = new ContainerBuilder();
            HttpConfiguration config = GlobalConfiguration.Configuration;
            // Register API controllers using assembly scanning.
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
            builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces();
            // 使用SQLserver數據庫實現
            //builder.RegisterType<SqlServerUserRepository>().As<IUserRepository>().InstancePerRequest();
            // 使用oracle數據庫實現
            builder.RegisterType<OracleUserRepository>().As<IUserRepository>().InstancePerRequest();
            var container = builder.Build();
            // Set the WebApi dependency resolver.
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }
    }
}

運行結果:

Web?API中如何使用Autofac實現依賴注入

從結果中可以看出:這里使用的是oracle實現的。

五、將Autofac的實現放到單獨的類庫中

新建DI.Server類庫,將Autofac的注冊單獨放在類庫中,AutofacWebApiConfig類定義如下:

using Autofac;
using Autofac.Integration.WebApi;
using DI.Interface;
using DI.SqlServer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Mvc;

namespace DI.Server
{
    public class AutofacWebApiConfig
    {
        public static void RegisterDependencies()
        {
            SetAutofacWebapi();
        }

        private static void SetAutofacWebapi()
        {
            ContainerBuilder builder = new ContainerBuilder();
            HttpConfiguration config = GlobalConfiguration.Configuration;
            // Register API controllers using assembly scanning.
            builder.RegisterApiControllers(Assembly.LoadFrom(@"F:\Practice\WebAPI\WebApi依賴注入\DI\WebApiDIDemo\WebApi\bin\WebApi.dll"));
            builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces();
            builder.RegisterType<SqlServerUserRepository>().As<IUserRepository>().InstancePerRequest();
            var container = builder.Build();
            // Set the WebApi dependency resolver.
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }
    }
}

注意:

如果是在單獨的類庫項目中,注冊Api控制器的時候要加載WebApi項目所有的程序集文件,不要使用builder.RegisterApiControllers(Assembly.GetExecutingAssembly()),這里找到的當前程序集是類庫文件,不是WebApi項目的程序集文件,在控制器里面不會實現注入。

2、修改Global.asax文件

修改后的Global.asax文件定義如下:

using DI.Server;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;


namespace WebApi
{
    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);

            // 配置依賴注入(注意:這里使用的是單獨類庫里面的AutofacWebApiConfig類)
            AutofacWebApiConfig.RegisterDependencies();
        }
    }
}

運行程序,效果和上面的一樣。

關于“Web API中如何使用Autofac實現依賴注入”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Web API中如何使用Autofac實現依賴注入”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

若尔盖县| 泊头市| 双鸭山市| 连城县| 合水县| 陈巴尔虎旗| 全南县| 山东| 手机| 永平县| 毕节市| 武威市| 榆林市| 眉山市| 韶山市| 临沭县| 南投市| 江陵县| 德令哈市| 奉新县| 永善县| 巴彦县| 兴山县| 重庆市| 彩票| 石家庄市| 普兰店市| 兴仁县| 岱山县| 绥滨县| 偏关县| 麻江县| 兴安盟| 阳泉市| 韶关市| 涟水县| 新乐市| 舟曲县| 萨嘎县| 夏津县| 波密县|