我是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
中的控制器。任何建议都会很棒。
答案 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"));