0

オニオンアーキテクチャで依存性注入に頭を悩ませようとしていますが、タマネギの周りに依存性解決レイヤーを使用するこのソリューションを見つけました。しかし、私が完全に失われるほど多くのことが起こっています。

それで、私はそれを試すためにプロジェクトをセットアップしました。私は単純なものから始めるのが好きなので、(MVC)コントローラーメソッドの単純なログエントリが良い出発点になります。Ninject wikiから推奨されているので、Dynamic Module Loading( )を使用したいと思います。kernel.Load("*.dll");

私の解決策は次のようになります:(今のところ)

Solution
- Core.Services
- Infrastructure.Logging
- DependencyResolution
- UI.MVC (default internet template)

ここで概説されている依存関係解決のガイドラインに従いたいと思います。

ここに画像の説明を入力してください

Ilogger

namespace Core.Services
{
    public interface ILogger
    {
        void Log(string message);
    }
}

ロギングの実装

namespace Infrastructure.Logging
{
    public class DebugLogger : ILogger
    {
        public void Log(string message)
        {
            Debug.WriteLine(message);
        }
    }
}

依存関係の解決

namespace DependencyResolution
{
    public class TestModule : NinjectModule
    {
        public override void Load()
        {
            Bind<ILogger>().To<DebugLogger>();
        }
    }
}

達成したいこと

UI

namespace UI.MVC.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger _logger;

        public HomeController(ILogger logger)
        {
            _logger = logger;
        }

        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

            _logger.Log("It works!");

            return View();
        }
    }
}

なんとかして実行する必要がkernel.Load("*.dll");あり、DIを使用するようにMVCをセットアップする必要があります。UIが依存関係解決レイヤーについて認識できないため、どのようにすればよいかがわかりました。

4

1 に答える 1

1

DIコンテナはどこかに作成する必要があります。この場所はと呼ばれcomposition root、最外層です。あなたの場合、それはASP.NETMVCアプリケーションになります。したがって、DIについて知らないはずだと言っても意味がありません。Ninject.MVC3パッケージには、アプリケーションにプラグインされるカスタム依存関係リゾルバー実装が付属しており、コントローラーで自動DIを取得します。

于 2013-03-03T17:14:57.963 に答える