1

私は、Entity Framework 5(edmxを使用)を使用してasp.netmvc4で作業しています。Ninjectを正しく機能させようとしていますが、バインディングを使用するとかなり混乱します。以前にNinjectが使用されているのを見たことがありますが、それはDIがWCFレイヤーに設定されていたWCFプロジェクトでした。

現在、4つのレイヤーがあります。

  • DataAcces(edmxとリポジトリが含まれています。これについては後で説明します)
  • BusinessLogic(標準BL)
  • 共通(モデル)
  • Gui(mvc4プロジェクト)

ここで注意が必要な部分があります。ここでDIを使用したいと思います。以前のWCFプロジェクトで使用されているのを見たのは、WCFレイヤーがDataAccessに移動して、kernel.bindを使用できるようにすることでした。
今、私はここでそれを望んでいません。私はWCFを使用していません。また、GUIでDataAccessを呼び出したくありません。

私が洞察のためにいくつかのコードを示すと言ったので:

DataAccessのリポジトリ

public class Repo: IRepo
    {
        Entities context = new Entities();

        public IQueryable<PictureSource> PictureSource
        {
            get { return context.PictureSource; }
        }
    }

私のIRepositoryはこれだけです:

public interface IRepository
    {
        IQueryable<PictureSource> PictureSource { get; }
    }

私がやりたいのは、ビジネスロジックです。私は次のことができるようになりたいです:

public List<Picture> GetStuff(IRepository Repo)
        {
          //code
        }

今、私はインターネットでたくさん見ました。例の約80%は、私には役に立たないWebApimを使用しています。他の20%は、「単なるデモであるため」、Gui-BL-DAの原則に違反しているため、やりたいことを何でもしているようです。データアクセスでビジネスロジックを実行する例に対する単一のレイヤーで構成される例を見てきました。ninject wikiも、私がDIを初めて使用し、既存のアプリケーションで使用されているのを見ただけなので、役に立ちませんでした。

4

2 に答える 2

2

Poor-Man's-DIを使用してコーディングしてみてください。コンストラクターに依存関係を注入してください!

public class BusinessLogic
{ 
  private _repository;

  public BusinessLogic(IRepo repository) 
  { 
     _repository = repository;
  }

  public List<Picture> GetStuff()
  {
      _repository.PictureSource.Where(x=>x.Published == false);
  }
 }

コードベースを正しく取得したら、依存関係をNinjectに登録します。次に、Ninjectは、リポジトリをBusinessLogicクラスに注入するように注意します。

IRepoにIQueryableがあることに注意してください。これは避ける必要があります(http://www.infoq.com/news/2012/03/IQueryable-api

編集:これはあなたのソリューション構造と参照になります:

MVC4 (GUI)
 -> DataAccess
 -> BusinessLogic
 -> Common

You need to setup this references, to wire up your bindings.

BusinessLogic
 -> Common (including your Interfaces!)

DataAccess
 -> Common
于 2012-09-27T10:33:25.767 に答える
0
IKernel kernel = new StandardKernel();
kernel.Load("*.dll");

これにより、現在のディレクトリのNinjectModuleすべてのsにsがロードされます。.dllしたがって、DALへの参照を追加する必要はありません。

于 2013-09-01T16:43:41.033 に答える