2017-02-05 5 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#で非常に新しく、上記のコードはランタイムエラーのみを示しています。私がやろうとしているのは、の値をDBConnectionに入れてHomePageRepositoryにして、コントローラにHomeControllerという値を渡します。どんな提案も素晴らしいだろう。

+1

サービスをスタートアップクラス(ConfigureServices())に登録しましたか? – Kalten

+1

あなたのコードがちょっと混乱しているのではないかと心配しています。ここで質問を投稿する前に、あなたが把握しようとしているさまざまなテクノロジーをどのように使用するかについて、いくつかの基本的なチュートリアルを実行することをお勧めします。 – DavidG

答えて

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

これは答えの最初の部分(質問がとても混乱しているときは分かりません)のように見えますが、これは接続文字列を渡すポイントにどのように答えますか? – DavidG

0

私は、接続の文字列をconnectDBメソッドに渡したい場合、以下のコードサンプルを参考にしてください。しかし、より良いオプションは、インターフェイスでDBをラッパーにあるとDI

で初期化されたあなたは、DBの拡張メソッドは、次に起動クラスのConfigureServices方法

services.AddSingleton<IHomepageRepository>(new HomepageRepository ("dbstring")); 
にエントリの下に追加し

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

以下のようにホームリポジトリを変更する必要はありません。

関連する問題