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

标签 asp.net-mvc-3 ninject

我猜这个问题很简单,但我花了一个小时试图为我的 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/

相关文章:

asp.net-mvc-3 - 在 MVC3 中的 DropDownList 中设置默认选定值

c# - 使用 Ninject 查找实现通用接口(interface)的类

c# - Ninject woes... 404错误问题

asp.net-mvc-3 - 验证属性被触发两次

c# - Ninject.Extensions.Factory : cannot find binding

asp.net-mvc-3 - HTML.CheckBox MVC3 的同名

c# - MVC 3 模型验证问题——疏忽或设计使然

asp.net-mvc - 全局访问 Ninject 内核

asp.net - 文件上传和结果池杀死了 ASP.NET Web 应用程序

c# - 如何在 ASP.NET MVC 3 站点中执行后台作业?