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

36m*_*1gs 5 c# dependency-injection mongodb asp.net-core-mvc .net-core

我试图按照本教程熟悉使用 .Net Core 的 MVC 和数据层来处理 MongoDB 信息的分层解决方案中的依赖项注入:https://code-maze.com/getting-started-aspnetcore-mongodb/

我的 .sln 设置如下:

项目A----MVC层

项目B ---- MongoDB层

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

接下来,我首先创建一个接口来从服务中提取连接信息。由于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; }



    }
}
Run Code Online (Sandbox Code Playgroud)

我在 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; }

        
}
Run Code Online (Sandbox Code Playgroud)

为了尝试检索集合,在 .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);

        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我最终编写的 .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>
Run Code Online (Sandbox Code Playgroud)

这爆炸了,给我以下错误消息:

我是个头脑聪明的傻瓜

编辑:我确实在 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>();
        }
Run Code Online (Sandbox Code Playgroud)

我觉得这里存在概念上的差距:任何帮助将不胜感激!

Kam*_*erl 2

appsettings.json 中的部分名称必须与您要在此处配置的部分匹配

 services.Configure<MyDBSettings>(Configuration.GetSection("DotNetCore_Study"));
Run Code Online (Sandbox Code Playgroud)