欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Web API中使用Autofac實(shí)現(xiàn)依賴(lài)注入

 更新時(shí)間:2022年03月13日 10:46:42   作者:.NET開(kāi)發(fā)菜鳥(niǎo)  
本文詳細(xì)講解了Web API中使用Autofac實(shí)現(xiàn)依賴(lài)注入的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、創(chuàng)建實(shí)體類(lèi)庫(kù)

創(chuàng)建單獨(dú)實(shí)體類(lèi)

創(chuàng)建DI.Entity類(lèi)庫(kù),用來(lái)存放所有的實(shí)體類(lèi),新建用戶(hù)實(shí)體類(lèi),其結(jié)構(gòu)如下:

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

二、創(chuàng)建倉(cāng)儲(chǔ)接口類(lèi)庫(kù)

新建DI.Interface類(lèi)庫(kù)文件,存放所有接口,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();
    }
}

三、創(chuàng)建倉(cāng)儲(chǔ)接口的實(shí)現(xiàn)類(lèi)庫(kù)

1、SQL Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)

新建DI.SqlServer類(lèi)庫(kù)文件,SqlServerUserRepository實(shí)現(xiàn)IUserRepository接口,SqlServerUserRepository類(lèi)定義如下:

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數(shù)據(jù)庫(kù)實(shí)現(xiàn)

新建DI.Oracle類(lèi)庫(kù)文件,OracleUserRepository實(shí)現(xiàn)IUserRepository接口,OracleUserRepository類(lèi)定義如下:

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項(xiàng)目

1、安裝依賴(lài)項(xiàng)

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

2、創(chuàng)建AutofacWebApiConfig類(lèi)

AutofacWebApiConfig類(lèi)定義如下:

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數(shù)據(jù)庫(kù)實(shí)現(xiàn)
            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);

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

4、創(chuàng)建Users控制器

創(chuàng)建UsersController類(lèi),并在構(gòu)造函數(shù)中注入,UsersController類(lèi)定義如下:

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>
        /// 構(gòu)造函數(shù)中注入
        /// </summary>
        /// <param name="userRepository"></param>
        public UsersController(IUserRepository userRepository)
        {
            this._userRepository = userRepository;
        }

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

5、測(cè)試

啟動(dòng)程序,然后在瀏覽器里面輸入:http://localhost:51157/api/users,結(jié)果如下:

從結(jié)果中可以看出:這里使用的是SQLserver實(shí)現(xiàn)的。

修改AutofacWebApiConfig文件,用oracle實(shí)現(xiàn),修改后的代碼如下:

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數(shù)據(jù)庫(kù)實(shí)現(xiàn)
            //builder.RegisterType<SqlServerUserRepository>().As<IUserRepository>().InstancePerRequest();
            // 使用oracle數(shù)據(jù)庫(kù)實(shí)現(xiàn)
            builder.RegisterType<OracleUserRepository>().As<IUserRepository>().InstancePerRequest();
            var container = builder.Build();
            // Set the WebApi dependency resolver.
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }
    }
}

運(yùn)行結(jié)果:

從結(jié)果中可以看出:這里使用的是oracle實(shí)現(xiàn)的。

五、將Autofac的實(shí)現(xiàn)放到單獨(dú)的類(lèi)庫(kù)中

新建DI.Server類(lèi)庫(kù),將Autofac的注冊(cè)單獨(dú)放在類(lèi)庫(kù)中,AutofacWebApiConfig類(lèi)定義如下:

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依賴(lài)注入\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);
        }
    }
}

注意:

如果是在單獨(dú)的類(lèi)庫(kù)項(xiàng)目中,注冊(cè)Api控制器的時(shí)候要加載WebApi項(xiàng)目所有的程序集文件,不要使用builder.RegisterApiControllers(Assembly.GetExecutingAssembly()),這里找到的當(dāng)前程序集是類(lèi)庫(kù)文件,不是WebApi項(xiàng)目的程序集文件,在控制器里面不會(huì)實(shí)現(xiàn)注入。

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

            // 配置依賴(lài)注入(注意:這里使用的是單獨(dú)類(lèi)庫(kù)里面的AutofacWebApiConfig類(lèi))
            AutofacWebApiConfig.RegisterDependencies();
        }
    }
}

運(yùn)行程序,效果和上面的一樣。

到此這篇關(guān)于Web API中使用Autofac實(shí)現(xiàn)依賴(lài)注入的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論