我有MVC项目,它处理前端和基础设施项目,它处理后端操作,即
UI依赖于基础架构。现在我尝试添加日志记录,接口和实现都在 Cool.Infrastructure 中。我在 Cool.UI 中有NinjectModule,它执行以下操作:
public class Bindings : NinjectModule
{
public override void Load()
{
//logging interfaces
this.Kernel.Bind<ILogger>().To<ApplicationLogger>();
}
}
我通过属性注入,即:
[Inject]
public ILogger Log { get; set; }
当我在 Cool.UI 上执行此操作时,我可以使用Logger,当我在后端执行时,我在Log对象中获取null。我尝试将Bindings模块添加到 Cool.Infrastructure ,但没有用。由于我使用Ninject.WebCommons,我试图单独加载库
private static void RegisterServices(IKernel kernel)
{
kernel.Load(Assembly.GetExecutingAssembly());
kernel.Load(Assembly.GetAssembly(typeof(Bindings)));
}
其中Bindings是 Cool.Infrastructure 中的空NinjectModule。不知道为什么没有成功?
答案 0 :(得分:0)
所以我创建了一个新的MVC5项目。我添加了NuGet包Ninject.MVC5
。我在Infrastructure
项目中添加了UI
项目作为参考。
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ILogger>().To<Logger>();
}
我在Bind
编辑了具体的界面。
使用属性注入我这样做:
private ILogger Logger
{
get
{
return DependencyResolver.Current.GetService<ILogger>();
}
}
DependencyResolver
是服务定位器,它在应用程序启动时由Ninject设置。从这里,您可以解决您创建的所有依赖项