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

时间:2017-02-05 23:30:21

标签: c# asp.net-core asp.net-core-1.0

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

  

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

这是我的代码

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#很新,上面的代码只给出了运行时错误。我要做的就是将connectionString中的DBConnection值传递给HomePageRepository,然后将其传递到HomeController中的控制器。任何建议都会很棒。

2 个答案:

答案 0 :(得分:0)

您必须在启动类中注册该服务。以下是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

这样的东西

答案 1 :(得分:0)

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

初始化

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

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

然后将下面的条目添加到Startup Class的ConfigureServices方法

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