オニオンアーキテクチャで依存性注入に頭を悩ませようとしていますが、タマネギの周りに依存性解決レイヤーを使用するこのソリューションを見つけました。しかし、私が完全に失われるほど多くのことが起こっています。
それで、私はそれを試すためにプロジェクトをセットアップしました。私は単純なものから始めるのが好きなので、(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が依存関係解決レイヤーについて認識できないため、どのようにすればよいかがわかりました。