Ninject跨程序集注入

本文关键字:注入 程序集 Ninject | 更新日期: 2023-09-27 18:29:27

我有MVC项目,它负责前端操作,还有Infrastructure项目,它处理后端操作,即

  • 酷UI
  • 酷。基础设施

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

Ninject跨程序集注入

所以我创建了一个新的MVC5项目。我添加了NuGet包Ninject.MVC5。我在UI项目中添加了Infrastructure项目作为参考。

/// <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在应用程序启动时设置的。从这里,您可以解析创建的所有依赖项