Ninject注入程序集

时间:2014-11-07 09:08:24

标签: c# model-view-controller ninject

我有MVC项目,它处理前端和基础设施项目,它处理后端操作,即

  • Cool.UI
  • Cool.Infrastructure

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。不知道为什么没有成功?

1 个答案:

答案 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设置。从这里,您可以解决您创建的所有依赖项