2016-03-21 3 views
1

私は、次のコントローラがあります。Simple Injectorとの値の型依存性を持つMVCコントローラを解決するにはどうすればよいですか?

public class MyController : Controller { 
    private readonly IService service; 
    private readonly int intDependency; 

    public MyController(IService service, int intDependency) { 
     this.service = service; 
     this.intDependency = intDependency; 
    } 

    ... 
} 

明らかに解像度が動作しない、またこれは、複数のコンストラクタ登録で終わるであろうから、私は、デリゲートを使用して、コンストラクタのパラメータを提供することができます。

この場合に進行するための正しい方法は何ですか?それは一般的に依存性として値の型を注入することは間違っていますか?インターフェイスの背後に依存関係をラップする方がよいでしょうか?

答えて

3

それが依存関係として、一般的に正しくな注入値型か?

実際、あなたが見ることができるようにインジェクタが注入する必要があるintを知る方法はありません。本当に意味をなさない。

インターフェイスの背後にある依存関係をラップする方がよいでしょうか?

はい。

この場合に進行するための正しい方法は何ですか?

あなたはそれを言いました。インタフェースまたはクラスのいずれか。

例:

public class MyConfig 
{ 
    public int MyInt {get; set;} 
} 

そして、あなたは、このようSimpleInjectorを設定できます。

container.RegisterSingleton(new MyConfig { MyInt = 42 }); 

とあなたのコントローラは次のようになります。

public MyController(IService service, MyConfig config) { ... 

注:プリミティブ注入する方法がありますタイプ:Primitive Dependencies with Simple Injector しかし、それは方法簡単ですし、私の例のようなクラスでプリミティブをラップするだけです。

+0

hmm、それはほぼ同じ答えです! –

3

インターフェイスの背後にある依存関係をラップする方がよいでしょうか?

はい、それは提案された解決策になります。値の型はサポートされていません。直接値を注入するのではなく、クラスにラップして注入します。

インプリメンテーションにインターフェイスを配置することをお勧めしますが、これは必須ではありません。シンプルインジェクターは関係ありません。これは動作します:

public class Values 
{ 
    public Values(int value) 
    { 
     this.SomeValue = value; 
    } 

    public int SomeValue { get; } 
} 

// Register as 
container.RegisterSingleton<Values>(() => new Values(1)); 

少し醜いとIMOは行く方法ではありませんが、オプションがあります。これらは記載されているhere

+0

あなたが入力中にあなたの心を読んでいたようです...同じ答え、同じ記事、私はあなたの答えを見ました。 – Chris

関連する問題