我正试图围绕Onion Architecture中的依赖注入,我发现这个解决方案在洋葱周围使用依赖解析层。但是发生的事情太多了,我完全迷失了。
所以我设置了一个项目来尝试一下。我喜欢从简单开始,因此(MVC)控制器方法上的简单日志条目将是一个好的开始。我想使用动态模块加载( kernel.Load("*.dll");
),因为它是 Ninject wiki 推荐的。
我的解决方案如下所示:(目前)
Solution
- Core.Services
- Infrastructure.Logging
- DependencyResolution
- UI.MVC (default internet template)
我想遵循此处概述的依赖关系解决指南。
记录器
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>();
}
}
}
我想要完成的
用户界面
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");
某种方式运行,我需要设置我的 MVC 以使用 DI。我现在才确定如何,因为 UI 无法知道 Dependency Resolution 层。