Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net核心web api,如何注入连接字符串_Asp.net_Dependency Injection_Asp.net Core_Asp.net Core 2.0 - Fatal编程技术网

asp.net核心web api,如何注入连接字符串

asp.net核心web api,如何注入连接字符串,asp.net,dependency-injection,asp.net-core,asp.net-core-2.0,Asp.net,Dependency Injection,Asp.net Core,Asp.net Core 2.0,这是我的asp.net核心项目结构 1-ASP.NET核心Web API(包含aspsettings.json) 2-SERVICES项目(服务项目中的Web API调用方法) 3-存储库项目(来自存储库项目和存储库项目的服务调用方法包括所有模型所在的数据项目) 4-数据项目,其中首先包含所有带有代码的模型 public class TtEntities : DbContext { public virtual DbSet<RoomMessage> Room

这是我的asp.net核心项目结构

1-ASP.NET核心Web API(包含aspsettings.json)

2-SERVICES项目(服务项目中的Web API调用方法)
3-存储库项目(来自存储库项目和存储库项目的服务调用方法包括所有模型所在的数据项目)

4-数据项目,其中首先包含所有带有代码的模型

public class TtEntities : DbContext
    {

        public virtual DbSet<RoomMessage> RoomMessage { get; set; }
        public virtual DbSet<UserRoom> UserRoom { get; set; }


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
           optionsBuilder.UseSqlServer(@"Server=(local)\SQLEXPRESS;Database=testdb;Trusted_Connection=True;");
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
....
公共类注意事项:DbContext
{
公共虚拟数据库集RoomMessage{get;set;}
公共虚拟数据库集用户室{get;set;}
配置时受保护的覆盖无效(DBContextOptions Builder Options Builder)
{
optionsBuilder.UseSqlServer(@“服务器=(本地)\SQLEXPRESS;数据库=testdb;可信连接=True;”;
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
....
如您所见,我在配置方法上硬编码了连接,这肯定不是最佳实践

是否有方法从Web API项目的配置文件传递连接字符串

如果我们从web api项目的文件aspsettings.json传递连接,更新数据库命令是否仍然有效


非常感谢

DI完美地解决了这个问题,.NET Core 2.0拥有Microsoft DI,它提供了使用DI的清晰体验

哦,让我们开始吧(我认为数据项目和存储库项目应该是一个)

从存储库项目 将您的REPOSITORYClass更改为

    public class REPOSITORYClass 
    {
        private readonly TtEntities _db;

        public REPOSITORYClass (TtEntities db){
            _db = db;
        }

        //some your staff of REPOSITORYClass thats uses _db
    }
现在转到服务项目

让我们更改一些使用REPOSITORYClass的服务

public class SomeService
    {
        private readonly REPOSITORYClass _repo;

        public SomeService (REPOSITORYClass repo){
            _repo = repo;
        }

        //other staff of SomeService thats uses _repo
    }
然后转到ASP.NET核心Web API启动文件并添加到

公共void配置服务

并从您的服务中使用您想要的任何东西,该服务注入了repo的deps和具有连接的注入db实体

就这些


PS还建议阅读此

DI完美地解决了此问题,.NET Core 2.0拥有Microsoft DI,它提供了使用DI的清晰体验

哦,让我们开始吧(我认为数据项目和存储库项目应该是一个)

从存储库项目 将您的REPOSITORYClass更改为

    public class REPOSITORYClass 
    {
        private readonly TtEntities _db;

        public REPOSITORYClass (TtEntities db){
            _db = db;
        }

        //some your staff of REPOSITORYClass thats uses _db
    }
现在转到服务项目

让我们更改一些使用REPOSITORYClass的服务

public class SomeService
    {
        private readonly REPOSITORYClass _repo;

        public SomeService (REPOSITORYClass repo){
            _repo = repo;
        }

        //other staff of SomeService thats uses _repo
    }
然后转到ASP.NET核心Web API启动文件并添加到

公共void配置服务

并从您的服务中使用您想要的任何东西,该服务注入了repo的deps和具有连接的注入db实体

就这些


PS还建议阅读此

一个简单的解决方案如下:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    }
}

一个简单的解决方案如下:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    }
}

能否提供在ASP.NET核心Web API中创建注意事项实例的代码?是否使用DI?能否提供在ASP.NET核心Web API中创建注意事项实例的代码?是否使用DI?
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-WebApplication5;"
  }
}