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

Asp.Net 動(dòng)態(tài)接口中屬性注入未生效的問題解決

 更新時(shí)間:2025年06月28日 11:02:56   作者:mouka~  
這篇文章主要介紹了Asp.Net 動(dòng)態(tài)接口中屬性注入未生效的問題解決,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

我有一個(gè)授權(quán)Service【AuthService】繼承抽象類【ApplicationService】,程序會(huì)后會(huì)將所有繼承IApplicationService的Service動(dòng)態(tài)轉(zhuǎn)換為Api接口,在swagger使用原生Controller控制器接口調(diào)用AuthService是沒有問題的,測(cè)試【AuthService】的動(dòng)態(tài)接口報(bào)錯(cuò)【LazyServiceProvider為null】

容器注入選擇的是:Autofac,所有服務(wù)均注冊(cè)

抽象類代碼如下:

其中LazyServiceProvider是通過屬性注入來實(shí)現(xiàn)的

    [Authorize]
    public abstract class ApplicationService : IApplicationService, IDynamicApi
    {
        /// <summary>
        /// 懶加載服務(wù)驅(qū)動(dòng)(屬性注入)
        /// </summary>
        [Autowired]
        public ILazyServiceProvider LazyServiceProvider { get; set; }
        #region Private-Attribute
        private IMapper _ObjectMapper;
        private ICurrentUserService _CurrentUser;
        private IPermissionChecker _IPermissionChecker;
        #endregion Private-Attribute
        #region Protected-Attribute
        /// <summary>
        /// AutoMap
        /// </summary>
        protected IMapper ObjectMapper
        {
            get
            {
                if (_ObjectMapper == null)
                {
                    _ObjectMapper = LazyServiceProvider.LazyGetRequiredService<IMapper>();
                }
                return _ObjectMapper;
            }
        }
        /// <summary>
        /// 當(dāng)前用戶
        /// </summary>
        protected ICurrentUserService CurrentUser
        {
            get
            {
                if (_CurrentUser == null)
                {
                    _CurrentUser = LazyServiceProvider.LazyGetRequiredService<ICurrentUserService>();
                }
                return _CurrentUser;
            }
        }
        /// <summary>
        /// 權(quán)限檢查
        /// </summary>
        protected IPermissionChecker PermissionChecker
        {
            get
            {
                if (_IPermissionChecker == null)
                {
                    _IPermissionChecker = LazyServiceProvider.LazyGetRequiredService<IPermissionChecker>();
                }
                return _IPermissionChecker;
            }
        }
        #endregion Protected-Attribute
    }

解決方法:

在ASP.NET Core配置中:

builder.Services.AddControllers()
    .AddControllersAsServices(); // 這很重要,確保控制器由DI容器解析

AddControllersAsServices()的主要作用是:

  1. 將控制器注冊(cè)為服務(wù):將所有控制器類注冊(cè)到依賴注入(DI)容器中

  2. 使用DI容器解析控制器:確??刂破鲗?shí)例由DI容器創(chuàng)建,而不是由MVC框架直接實(shí)例化

加與不加的區(qū)別:

- 不加AddControllersAsServices()

  1. 控制器創(chuàng)建方式

    • MVC框架會(huì)直接使用 ActivatorUtilities.CreateInstance 創(chuàng)建控制器實(shí)例

    • 只支持構(gòu)造函數(shù)注入,不支持屬性注入

  2. 生命周期

    • 每個(gè)請(qǐng)求都會(huì)創(chuàng)建新的控制器實(shí)例

    • 生命周期完全由MVC框架管理

  3. 限制

    • 無法使用Autofac等第三方容器的高級(jí)功能(如屬性注入)

    • 無法自定義控制器的解析過程

- 加AddControllersAsServices()

  1. 控制器創(chuàng)建方式

    • 控制器實(shí)例由DI容器創(chuàng)建

    • 支持完整的DI功能,包括構(gòu)造函數(shù)注入和屬性注入

  2. 優(yōu)勢(shì)

    • 可以使用第三方容器(如Autofac)的所有功能

    • 支持屬性注入

    • 可以自定義控制器的生命周期

    • 可以在控制器解析前后執(zhí)行自定義邏輯

  3. 生命周期

    • 默認(rèn)仍然是每個(gè)請(qǐng)求創(chuàng)建新實(shí)例(Transient)

    • 但可以通過注冊(cè)時(shí)指定來改變生命周期

到此這篇關(guān)于Asp.Net 動(dòng)態(tài)接口中屬性注入未生效的文章就介紹到這了,更多相關(guān)Asp.Net 屬性注入未生效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

六盘水市| 焦作市| 泾阳县| 莒南县| 合川市| 哈巴河县| 舟山市| 哈尔滨市| 乐山市| 新津县| 陕西省| 华容县| 黄山市| 如皋市| 红桥区| 小金县| 泗洪县| 永胜县| 江都市| 岗巴县| 厦门市| 江津市| 张家口市| 巴东县| 安康市| 瑞安市| 宁陕县| 曲周县| 淳化县| 阜康市| 浦城县| 嘉禾县| 日土县| 天祝| 延寿县| 龙山县| 马关县| 吴堡县| 平谷区| 松桃| 库车县|