2017-02-05 1 views
-1

저는 C# 및 asp.net 코어에 익숙하며 간단한 저장소 패턴을 만들고 string 값을 전달하려고하는데 오류가 발생했습니다asp.net core C# 어떻게 저장소 패턴의 값을 전달할 수 있습니까

요청을 처리하는 중 처리되지 않은 예외가 발생했습니다. 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이다 : 나는 그런 다음이

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

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

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

      return "hello"; 
     } 
    } 
} 
처럼 내 컨트롤러에이 통과 여기 connectionString

public class HomepageRepository : IHomepageRepository 
{ 
    private string connectionString; 

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

    public string Streams() 
    { 
     return connectionString; 
    } 
} 

의 값을 전달하고 싶습니다

다시 C#에 익숙하지 않으며 위의 코드는 런타임 오류 만 발생시킵니다. 내가하려는 일은 값을 DBConnectionHomePageRepository으로 전달한 다음 컨트롤러에 HomeController으로 전달하는 것입니다. 어떤 제안이라도 좋을 것입니다.

+1

서비스를 Startup 클래스 (ConfigureServices())에 등록 했습니까? – Kalten

+1

귀하의 코드가 약간 혼란 스럽네요. 정말 도움이되는 사람이 너무 많습니다. 여기에 질문을 게시하기 전에 그립에 도달하려는 다양한 기술을 사용하는 방법에 대한 몇 가지 기본 자습서를 실행해야합니다. – DavidG

답변

0

시작 클래스에 서비스를 등록해야합니다.

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

전체 예, 여기 : 다음은 MusicStore 샘플 응용 프로그램의 예입니다 https://github.com/aspnet/MusicStore/blob/dev/samples/MusicStore/Startup.cs#L80


편집 : DavidG는 지적

, 나는 질문의 일부를 놓쳤다.

기본 문자열을 기본 DI 컨테이너로 등록 할 수 없습니다. 그러나 해당 문자열을 제공하는 단일 메서드로 형식을 등록 할 수 있습니다. 뭔가 같은 것 ConnectionStringProvider

+1

이 질문은 대답의 첫 번째 부분 인 것처럼 보입니다. 질문이 너무 혼란 스러울 때를 말하기는 어렵지만 연결 문자열을 전달하는 것에 대한 대답은 무엇입니까? – DavidG

0

만약 당신이 아래 코드 샘플을 refere connectDB 방법에 패스 문자열을 연결 싶습니다. 하지만 더 나은 옵션은

당신은 방법을 클래스의 ConfigureServices

services.AddSingleton<IHomepageRepository>(new HomepageRepository ("dbstring")); 
시운전에 다음 항목 아래의 추가 DB 확장 방법은

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

아래와 같이 홈 저장소를 수정할 필요가 없습니다 인터페이스와 DB 래퍼와 DI

로 초기화하는 것입니다