0

Ninject を DI フレームワークとして使用している MVC4 プロジェクトがあります。私が抱えている問題は、メインの Web プロジェクトが他のすべてのプロジェクトを参照することを望まないため、実装から DI バインディングを分割しようとしていることです。

ninject モジュールを含む Bindings という別のプロジェクトを作成しようとしました。

public class WebModuleBindings : NinjectModule
{
    public override void Load()
    {
        Bind<IStaticDataRepository>().To<StaticDataRepository>();
    }
}

次に、この DLL を Web プロジェクトに動的にロードします。

    kernel.Load(bindingDll);

これは、ローカルで実行すると正常に動作しますが、msbuild を使用してアプリケーションをデプロイすると、バインディング プロジェクト dll はどこにも参照されないため含まれません。

この問題を解決する最善の方法は何ですか?

4

2 に答える 2

2

Bootstrapperがある場合、循環依存関係はありません。依存関係の流れは次のようになります。

Web Project
    |
    |_______________- Bootstrapper project. All of your Ninject Bindings, etc.
    |                 The Kernel is also created here and passed back to the
    |                 Web project.
    |                                   |
    |                                   |
    ▼                                   |
Business Layer --------------------------
    |                                   |
    |                                   |
    |                                   |
    ▼                                   |
Data Access Layer -----------------------

                       Possibly a dangling Entities/POCO project here

基本的に、ブートストラッパーはコンポジション ルートです。バインディングなどに必要なすべてのインターフェイス/具体的な実装にアクセスできるように、他のすべてのアセンブリを参照できます。次に、Web プロジェクトは Bootstrapper と次のレイヤーの両方を参照します。これにより、依存関係が流れ続け、コードを少し構造化するのに役立ちます。

于 2013-07-16T10:23:30.683 に答える
1

Web プロジェクトはホスト プロジェクトです。ホスト プロジェクトとして、すべての dll が確実に提供されるようにするのは Web プロジェクトの責任です。それは展開をより簡単にするでしょう

于 2013-07-16T10:03:38.253 に答える