1

私は依存性注入にかなり慣れていないので、ベスト プラクティスに関するアドバイスを探しています。これが以前に尋ねられた場合は申し訳ありませんが、まだ良い解決策を見つけることができませんでした.

MVC4 Web アプリと別のビジネス レイヤーがあるとします。MVC アプリは Ninject NuGet パッケージを使用して既にセットアップされているため、NinjectWebCommon を使用すると正常に動作します。

私の質問は: 他のレイヤーで依存関係を設定する必要がある場合、どのように Ninject を使用できますか?

次のリポジトリがあるとします。

public class WidgetRepository : IWidgetRepository
{
    // using an entity framework db context.
    WidgetDbContext context = new WidgetDbContext();

    public IQueryable<Widget> Widgets
    {
        get
        {
            return context.Widgets;
        }
    }
}

リポジトリから返される各ウィジェットは、挿入する必要がある計算機オブジェクトを使用して計算を実行する必要があります。

public class Widget
{
    // how can I get Ninject to inject a calculator object 
    // when Widgets are loaded form the database?

    public ICalculator calculator;

    public int MyValue { get; set; }

    public int CalculateSomething
    {
        get
        {
            return calculator.Calculate(MyValue);
        }
    }
}

MVC Web アプリで Ninject が設定されているが、Widget オブジェクトがビジネス レイヤーで作成されている場合、各 Widget インスタンスに ICalculator を挿入するベスト プラクティスは何ですか??

4

2 に答える 2

1

エンティティでコンストラクター注入またはプロパティ注入を実行しないようにします。次のいずれかを行う必要があります。

  1. 次のように、サービス層がウィジェットで計算を呼び出すようにします。

    var widget = this.repository.GetById(wigditId);
    var value = this.calculator.Calculate(widget.MyValue);
    
  2. または、エンティティへのコンストラクター注入を使用します。

    var widget = this.repository.GetById(wigditId);
    var value = widget.CalculateSomething(this.calculator);
    

これについては多くのことが書かれています。たとえば、次の記事をご覧ください。

于 2013-09-18T14:50:47.173 に答える