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。不成功,不知道为什么?
所以我创建了一个新的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在应用程序启动时设置的。从这里,您可以解析创建的所有依赖项