gpt4 book ai didi

asp.net-mvc-3 - 为什么 Ninject 不解析基类中的 protected 属性?

转载 作者:行者123 更新时间:2023-12-04 17:26:37 25 4
gpt4 key购买 nike

我猜这个问题很简单,但我花了一个小时试图为我的 Controller 获取一个基类,以便通过属性注入(inject)注入(inject)一些服务。属性最初的范围是 protected ,但是一旦我将范围更改为 public,对象就会一直返回 null,它就起作用了。无论如何要保护这些属性并让 IoC 工作吗?

这是我的设置。

public class BaseController : Controller
{
[Inject]
protected LoggingInterface.ILogger<BaseController> Logger { set; get; }

[Inject]
protected IRepository Repository { set; get; }

protected override void OnAuthorization(AuthorizationContext filterContext)
{
....

base.OnAuthorization(filterContext);
}
}

和 NinjectMVC3 App_Start 中的 Bootstrap
    private static void RegisterServices(IKernel kernel)
{
kernel.Bind(typeof(LoggingInterface.ILogger<>)).To(typeof(Log4NetLogger<>));
kernel.Bind<IRepository>().To<Repository>();
kernel.Bind<IUserService>().To<UserService>();
}

谢谢,
斯蒂芬

最佳答案

您不能注入(inject)没有公共(public) setter 的属性。您的 Logger 和 Repository 属性都是 protected 所以 Ninject 没有办法给它们赋值。如果你想实现这一点,你将不得不改变他们的 setter 可见性。或者使用构造函数注入(inject)。虽然这对于似乎需要的存储库属性非常有意义,但对于 logger 属性没有意义。所以我想你必须把它公开。

关于asp.net-mvc-3 - 为什么 Ninject 不解析基类中的 protected 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8042654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com