Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
C# MVC视图层MongoDB连接信息的依赖注入_C#_Mongodb_.net Core_Dependency Injection_Asp.net Core Mvc - Fatal编程技术网

C# MVC视图层MongoDB连接信息的依赖注入

C# MVC视图层MongoDB连接信息的依赖注入,c#,mongodb,.net-core,dependency-injection,asp.net-core-mvc,C#,Mongodb,.net Core,Dependency Injection,Asp.net Core Mvc,我正在尝试熟悉分层解决方案中的依赖项注入,该解决方案使用.Net Core的MVC和数据层来处理MongoDB信息,遵循本教程: My.sln的设置如下: 项目A----MVC层 项目B----MongoDB层 我想做的是使用我在视图的DB层中定义的函数来显示文档的信息。我遇到的问题是如何在Index.cshtml中调用函数 在tut之后,我开始制作一个接口,从服务中提取连接信息。因为A依赖于B,所以我在B中写了这个: namespace DataLayer { public class

我正在尝试熟悉分层解决方案中的依赖项注入,该解决方案使用.Net Core的MVC和数据层来处理MongoDB信息,遵循本教程:

My.sln的设置如下:

项目A----MVC层

项目B----MongoDB层

我想做的是使用我在视图的DB层中定义的函数来显示文档的信息。我遇到的问题是如何在Index.cshtml中调用函数

在tut之后,我开始制作一个接口,从服务中提取连接信息。因为A依赖于B,所以我在B中写了这个:

namespace DataLayer
{
    public class MyDBSettings : IDotNetStudyDBSettings
    {
        public string FileHistoryCollectioName { get; set; }
        public string FileResultsCollectionName { get; set; }
        public string ConnectionString { get; set; }

        public string DatabaseName { get; set; }



    }


    public interface IDotNetStudyDBSettings
    {
        string FileHistoryCollectioName { get; set; }
        string FileResultsCollectionName { get; set; }
        string ConnectionString { get; set; }
        string DatabaseName { get; set; }



    }
}
我在我的Startup.cs中配置了我的服务,以便将该信息传递到此接口。根据本教程,我还为我尝试提取的集合创建了实体模型:

  public class File_History
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]

        public string Id { get; set; }
        public DateTime Date { get; set; }
        public string FileName { get; set; }

       

    }

    public class File_Result
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]

        public string Id { get; set; }
        public int Attempt { get; set; }
        public string CF_Output { get; set; }

        public string UR_Output { get; set; }

        
}
为了尝试检索集合,我在.cshtml中实例化了MyDBSettings类,并将其传递给我编写的用于检索Mongo内容的函数:

public class MongoDB_Communicator
    {
         IMongoCollection<File_History> _filehistory;

        public IMongoCollection<File_History> FileService(IDotNetStudyDBSettings settings)
        {
            var client = new MongoClient(settings.ConnectionString);
            var database = client.GetDatabase(settings.DatabaseName);
            _filehistory = database.GetCollection<File_History>(settings.FileHistoryCollectioName);
            return (_filehistory);

        }
    }
公共类MongoDB_通信器
{
IMongoCollection\u文件历史记录;
公共IMongoCollection文件服务(IDotNetStudyDBSettings设置)
{
var client=newmongoclient(settings.ConnectionString);
var database=client.GetDatabase(settings.DatabaseName);
_filehistory=database.GetCollection(settings.FileHistoryCollectioName);
返回(_filehistory);
}
}
以下是我最终编写的.cshtml:

@{ 

    DataLayer.MyDBSettings test_sets = new DataLayer.MyDBSettings();
    MongoDB_Communicator test_cm = new MongoDB_Communicator();
  

}

@{
    
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Drag Python (3) File Below. No funny business or you're out.</p>
    <p>
    
    
    @{
        test_cm.FileService(test_sets);





        }</p>

</div>
@{
DataLayer.MyDBSettings test_set=new DataLayer.MyDBSettings();
MongoDB_通信器测试_cm=新的MongoDB_通信器();
}
@{
ViewData[“Title”]=“主页”;
}
欢迎
将Python(3)文件拖到下面。不要搞笑,否则你就出局了

@{ 测试配置文件服务(测试集); }

这发生了爆炸,给了我以下错误信息:

编辑:我确实在我的appsetting.Json中配置了它,如下所示(编辑以删除登录内容)

我的问题是,在实际检索信息时,我应该使用什么语法从我制作的界面检索设置信息?

我在StartUp.cs中设置了以下内容-我的印象是,通过将该类添加到服务中,它将在实例化后填充

public void ConfigureServices(IServiceCollection services)
        {
            //notate all of this
            services.Configure<MyDBSettings>(Configuration.GetSection(nameof(MyDBSettings)));
            services.AddSingleton<IDotNetStudyDBSettings>(provider => provider.GetRequiredService<IOptions<MyDBSettings>>().Value);
            services.AddControllersWithViews();
            services.AddControllers();
            services.AddScoped<MongoDB_Communicator>();
        }
public void配置服务(IServiceCollection服务)
{
//记下所有这些
Configure(Configuration.GetSection(nameof(MyDBSettings));
services.AddSingleton(provider=>provider.GetRequiredService().Value);
services.AddControllersWithViews();
services.AddControllers();
services.addScope();
}

我觉得这里有一个概念上的鸿沟:任何帮助都将不胜感激

appsettings.json中的节名称必须与此处要配置的节匹配

 services.Configure<MyDBSettings>(Configuration.GetSection("DotNetCore_Study"));
services.Configure(Configuration.GetSection(“DotNetCore_Study”);

appsettings.json中的节名称必须与此处要配置的节匹配

 services.Configure<MyDBSettings>(Configuration.GetSection("DotNetCore_Study"));
services.Configure(Configuration.GetSection(“DotNetCore_Study”);

你好,卡默尔,感谢您的回复!快速提问-我仍然在上面的更新中遇到错误。Configuration.GetSection正在查找我试图将依赖项注入的类吗?或者别的什么?Configuration.GetSection会查找参数字符串中定义的节是否可以在appsettings.json中找到,并将其作为MyDBSettings注入服务。我会接受您的答案,因为我觉得这会引导我走向正确的方向,但问题是-更新该参数后,我仍然会得到一个空字符串错误。这是否表示我将信息传递给函数的方式不正确?还是我的Startup.cs配置仍然存在问题?Startup.cs应该仍然存在问题,因为它表明仍然无法从appsettings.json读取该值可能也是一个问题,因为您的MongoDB_Communicator类没有构造函数,应该为DIHi Kammerl提供一个构造函数,感谢您的响应!快速提问-我仍然在上面的更新中遇到错误。Configuration.GetSection正在查找我试图将依赖项注入的类吗?或者别的什么?Configuration.GetSection会查找参数字符串中定义的节是否可以在appsettings.json中找到,并将其作为MyDBSettings注入服务。我会接受您的答案,因为我觉得这会引导我走向正确的方向,但问题是-更新该参数后,我仍然会得到一个空字符串错误。这是否表示我将信息传递给函数的方式不正确?还是我的Startup.cs配置仍然存在问题?Startup.cs应该仍然存在问题,因为它表明仍然无法从appsettings.json读取该值可能也是一个问题,即MongoDB_Communicator类没有用于DI的构造函数