第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Autofac:如何在 SingleInstance 范圍內(nèi)使用每個(gè)請(qǐng)求依賴(lài)項(xiàng)?

Autofac:如何在 SingleInstance 范圍內(nèi)使用每個(gè)請(qǐng)求依賴(lài)項(xiàng)?

C#
ibeautiful 2021-10-23 16:58:10
有IDbConnection注冊(cè)為per-request和ApplicationOAuthProvider注冊(cè)為 的連接依賴(lài)項(xiàng)single instance。builder.Register(c => new SqlConnection(WebConfigUtils.DefaultConnectionString))            .As<IDbConnection>()            .InstancePerRequest();builder.RegisterType<ApplicationOAuthProvider>()            .As<IOAuthAuthorizationServerProvider>()            .PropertiesAutowired()            .SingleInstance();需要在身份聲明中存儲(chǔ)用戶(hù)權(quán)限。為此,我創(chuàng)建了命令 GetRolePermissions,在此命令中我想注入IDbConnection實(shí)例。public class GetRolePermissions{    public class Command: IRequest<List<string>>    {        public ICollection<AspNetUserRole> UserRoles { get; set; }    }    public class Handler : AsyncRequestHandler<Command, List<string>>    {        private IDbConnection databaseConnection;        public Handler(IDbConnection databaseConnection)        {            this.databaseConnection = databaseConnection;        }    }}正在創(chuàng)建此命令 ApplicationOAuthProviderpublic class ApplicationOAuthProvider : OAuthAuthorizationServerProvider{    private async Task<ClaimsIdentity> GenerateUserIdentityAsync(AspNetUser user, string authenticationType)    {        user.SecurityStamp = Guid.NewGuid().ToString();        var identity = await mediator.Send(new GenerateUserIdentity.Command        {            AuthenticationType = authenticationType,            User = user        });    }}permissions = await mediator.Send(new GetRolePermissions.Command { UserRoles = user.Roles });-GetRolePermissions.Handler需要注入時(shí)拋出錯(cuò)誤IDbConnection,但當(dāng)前的 autofac 范圍ApplicationOAuthProvider是"root"并且沒(méi)有iDbConnection在此范圍內(nèi)注冊(cè)。但它存在于per-request范圍內(nèi)。不想perLifettime用于 IDbConnection,因?yàn)槲艺J(rèn)為,dbConnection在不必要時(shí)應(yīng)該關(guān)閉它。我想這樣做:using(var scope = AutofacConfig.container.BeginLifiTime("AutofacWebRequest")) {      permissions = await mediator.Send(new GetRolePermissions.Command { UserRoles = user.Roles });}但無(wú)法使此解決方案起作用。而且我不知道如何正確獲取容器,現(xiàn)在它是我手動(dòng)設(shè)置的 AutofacConfig 的靜態(tài)變量。如何啟用的注入IDbConnection到這個(gè)GetPermissions.Handler?
查看完整描述

1 回答

?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊

實(shí)際上,InstancePerLifetimeScope()就是您要尋找的解決方案。您需要做的就是注入 DbConnection工廠,該工廠生成DbConnection 的擁有(docs link 1和docs link 2)實(shí)例,而不是 DbConnection 本身。


// registration


builder.RegisterType<SqlConnection>()

    .As<IDbConnection>()

    .WithParameter(new NamedParameter("connectionString", WebConfigUtils.DefaultConnectionString))

    .InstancePerLifetimeScope();


// usage


public class GetRolePermissions

{

    public class Command: IRequest<List<string>>

    {

        public ICollection<AspNetUserRole> UserRoles { get; set; }

    }


    public class Handler : AsyncRequestHandler<Command, List<string>>

    {

        private Func<Owned<IDbConnection>> _connectionFactory;


        public Handler(Func<Owned<IDbConnection>> connectionFactory)

        {

            _connectionFactory = connectionFactory;

        }


        // not really sure where your consuming code is, so just something off the top of my head

        public DontKnowYourResultType Handle(GetRolePermissions.Command cmd) {

            using (var ownedConnection = _connectionFactory()) {

                // ownedConnection.Value is the DbConnection you want

                // ... do your stuff with that connection

            } // and connection gets destroyed upon leaving "using" scope

        }

    }

}

它確實(shí)改變了作為請(qǐng)求作用域的子作用域的行為,但我不確定這是否是您的代碼的問(wèn)題 - 試一試,它應(yīng)該可以正常工作。如果沒(méi)有,那么你知道去哪里問(wèn)。;)


查看完整回答
反對(duì) 回復(fù) 2021-10-23
  • 1 回答
  • 0 關(guān)注
  • 152 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)