繁体   English   中英

asp.net core C# 如何在存储库模式中传递值

[英]asp.net core C# how can I pass value in a repository pattern

我是 C# 和 asp.net 核心的新手,我正在尝试创建一个简单的存储库模式并传递一个string值,但出现错误

处理请求时发生未处理的异常。 InvalidOperationException:尝试激活“WebApplication.Controllers.HomeController”时无法解析“HomepageRepository”类型的服务。 获取服务

这是我的代码

public static class DBConnection 
{

    public static string  connectDB(this string connectionString) 
    {
        return connectionString = "pass value of this string";
    }
 }

HomePageRepository :我想在这里传递connectionString的值

public class HomepageRepository : IHomepageRepository
{
    private string connectionString;

    public HomepageRepository()
    {
        connectionString= connectionString.connectDB();
    }

    public string Streams()
    {
        return connectionString;
    }
}

然后像这样将它传递给我的控制器

namespace WebApplication.Controllers
{
    public class HomeController : Controller
    {
        public HomepageRepository _repository;

        public HomeController(HomepageRepository repository)
        {
            _repository = repository;
        }

        public string Streams()
        {
            _repository.Streams();

            return "hello";
        }
    }
}

我再次对 C# 很陌生,上面的这段代码只给出了一个运行时错误。 我想要做的就是将DBConnectionconnectionString值传递给HomePageRepository然后将其传递给HomeController的控制器。 任何建议都会很棒。

如果您想将连接字符串传递给 connectDB 方法,请参考下面的代码示例。 但更好的选择是用接口包装 DB 并用 DI 初始化

您不需要 DB 扩展方法修改 Home Repository 如下

public HomepageRepository(string dbconnectionString)
    {
        connectionString = dbconnectionString;
    }

然后将下面的条目添加到启动类的 ConfigureServices 方法中

 services.AddSingleton<IHomepageRepository>(new HomepageRepository ("dbstring"));

您必须在启动类中注册该服务。 以下是来自 MusicStore 示例应用程序的示例:

namespace MusicStore
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            ...
            services.AddSingleton<ISystemClock, SystemClock>();
            ...
        }
    }
}

完整示例,在这里: https : //github.com/aspnet/MusicStore/blob/dev/samples/MusicStore/Startup.cs#L80


编辑:

正如 DavidG 指出的那样,我错过了部分问题。

您无法使用开箱即用的 DI 容器注册纯字符串。 但是,您可以使用提供该字符串的单个方法注册类型。 类似于ConnectionStringProvider东西

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM