2016-07-13 10 views
3

に依存性注入を初期化するとき、私はこのようになります単純なクラスがあります。パスパラメータASP.NETコア

public class TestClass1 
{ 
    private string testString = "Should be set by DI"; 

    public TestClass1(string testString) 
    { 
     this.testString = testString; 
    } 
    public string GetData() 
    { 
     return testString + DateTime.Now; 
    } 
} 

を私は、単純なASP.NETコアウェブでビルドでDIを使用して、それを注入したいです依存関係注入を初期化するときに "testString"パラメータが設定されています。

私は startup.csに次のように設定しようとしましたが、TestClass1は、パラメータなしのコンストラクタを持っていないので、それは実行時に失敗した

services.AddScoped(provider => new TestClass1("Success!")); 
+2

質問には意味がありません。投稿したコードは正常に動作します。あなたはおそらくあなたの質問にいくつかの重要な情報が不足しているが、私はあなたが欠けているものを判断することはできません。取得した例外の詳細(例外タイプ、メッセージ、スタックトレース、内部例外の詳細)を投稿してください。 – Steven

+0

あなたは本当にこのクラスを注入していますか? 'new'で' new TestClass() 'のように初期化しようとしていますか? DIがこのように機能しない – Tseng

+0

ConfigureServicesメソッドを投稿できますか? –

答えて

1

私はあなただけのコードとの使用状況のcruical一部を逃した疑いDIは登録でなく間違っているだけです。

public class MyController 
{ 
    private readonly MyClass myClass; 

    public MyController() 
    { 
     // This doesn't work and do not involve DI at all 
     // It will fail because MyClass has no parameterles constructor 
     this.myClass = new MyClass(); 
    } 
} 

DIは、種類にnewを呼び出すときに魔法の依存関係を注入してみましょう何のコンパイラの魔法ではありませんので、上記、動作しません。あなたはDI/IoCのを使用する場合

public class MyController 
{ 
    private readonly MyClass myClass; 

    public MyController(MyClass myClass) 
    { 
     // This should work, because the IoC/DI Container creates the instance 
     // and pass it into the controller 
     this.myClass = myClass; 
    } 
} 

あなたは、したがって、あなたのサービスクラスでnewを呼び出すことはありません、コンストラクタは、オブジェクトを生成し、インスタンス化してみましょう。コンストラクタで、ある種のインスタンスまたはそのインタフェースが必要であることを伝えてください。

編集:

このは、ASP.NETコアの以前のバージョン(ベータ版)で動作するように使用されます。それでも動作するはずですが、パラメータに限定してください:

public class MyController 
{ 
    public IActionResult Index([FromServices]MyClass myClass) 
    { 
    } 
} 
+0

ありがとうsoooooo。私はあなたのコードを試して、もちろんそれは働いた。それから、私自身のコードをチェックしました。私の誤りは、Controllerコンストラクタメソッドではなく、ActionResultメソッドに 'TestClass testClass'を置くことでした。 また、私の正しい方向を指すための@stevenのおかげで:) –

+1

あなたのユースケースと答えのサンプルコードを追加しておく必要があります。多分。アクションの場合、パラメータに '[FromServices]'属性を使用して注入するメソッドがありました。 https://docs.asp.net/en/latest/mvc/controllers/dependency-injection.html#action-injection-with-fromservices数回変更された(プロパティとコントローラから削除される)このGitHubの問題https://github.com/aspnet/Mvc/issues/3578で。私はそれがまだアクションのパラメータで動作している場合は駄目です – Tseng