首页 新闻 会员 周边 捐助

Asp.Net Core 3.1 带参数的构造函数如何依赖注入?

0
[待解决问题]

现有如下系统:
1.用户登录后,有该系统所在的子数据库名称
2.每个用户可能不同子数据库
3.每个子数据库各个功能一直
问题:
再asp.net core 中如何根据用户登录信息,实例化各个用户的Db对象,即通过注入的方式,实例化每个用户的DbContext对象,在网上一大堆,都是无参构造函数实力注册,难道大家都没有这方面的需求嘛?

E=mc²的主页 E=mc² | 初学一级 | 园豆:8
提问于:2020-09-26 17:26
< >
分享
所有回答(5)
0

DbContext有带参构造函数,参数为连接字符串
你也可参考这个:https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/configuring-dbcontext

E行者 | 园豆:1811 (小虾三级) | 2020-09-26 17:55

我的这个参数,不是再配置文件内,是在登录用户的用户状态内,例如 A用户记录的数据库是a,那么依赖注入的时候,如何把 a 作为参数,实例化一个DbContext ,大佬?求指教

支持(0) 反对(0) E=mc&#178; | 园豆:8 (初学一级) | 2020-09-26 18:13

@E=mc²: 不同的数据库无非就是连接字符串和provider(提供程序)不同,依赖注入不就是根据连接字符串和provider进行构造的吗?我上面发的链接的代码里不是很清晰吗

支持(0) 反对(0) E行者 | 园豆:1811 (小虾三级) | 2020-09-26 18:18
0

大概的伪代码是这样子:

class userOptions
{
   ctor(httpcontextaccess httpconext){};
   public string userid=>httpcontext.request......;
}

DI.addsscope(useroptions);

class yourdbcontext:{
ctor(useroptions,dboptions<yourdbcontext>)
}
czd890 | 园豆:14488 (专家六级) | 2020-09-27 11:02
0

.net core 中间件的定义:

public static class ServiceCollectionExtensions
    {
        
        public static IServiceCollection Addxx(this IServiceCollection services, IConfiguration configuration)
        {
            //....

            return services;
        }

        public static IServiceCollection AddXX(this IServiceCollection services, Action<XXOption> options)
        {
          
           //...

            return services;
        }
    }
public class XXOption
    {
        public XXOption();

        public int CacheAbsoluteExpirationRelativeToNow { get; set; }
        public CacheTypeEnum CacheType { get; set; }
    }

StartUp.cs中 ConfigureServices注入写法:

 services.AddXX((option) => {
                option.CacheAbsoluteExpirationRelativeToNow = 600;
                option.CacheType = CacheTypeEnum.Redis;
            });

更多技能关注 .NET Core 跨平台

楠木大叔 | 园豆:2083 (老鸟四级) | 2020-09-27 13:27
0

可以思考参见sass的模式,根据请求头中的tenant标识自动寻找对应的数据库。

Jonny-Xhl | 园豆:691 (小虾三级) | 2020-09-27 15:04
0

1.option选项模式
2.工厂模式

gt1987 | 园豆:1150 (小虾三级) | 2020-09-28 10:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册