.Net MVC 3 与 Ninject 和 [Inject] 属性配置

发布于 2024-11-27 23:51:47 字数 1153 浏览 0 评论 0原文

我将 Global.asax 中的 HttpAplication 继承替换为 NinjectHttpApplication

public class Global : NinjectHttpApplication
{
    protected override IKernel CreateKernel()
    {
        return Bootstrapper.CreateKernel();
    }

    protected override void OnApplicationStarted()
    {
        base.OnApplicationStarted();
        DependencyResolver.SetResolver(new NinjectDependencyResolver(CreateKernel()));
        Bootstrapper.Bootstrap();
    }
}

而我的 CreateKernel 方法:

public static IKernel CreateKernel()
{
    var kernel = new StandardKernel();
    kernel.Load(Assembly.GetExecutingAssembly());
    return kernel;
}

我需要使用 [Inject]我的 RoleService 中的 属性使用 RoleProvider 并由 asp.net 启动。

所有人都说,如果我从 Global.asax 中的 NinjectHttpApplication 继承,我不需要该行: DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));< /code> 在我的 OnApplicationStarted 方法中,但如果没有它,就会抛出异常,并且我的 RoleProvider 服务中的依赖项为 NULL

毕竟,我是否需要那条线?我做错了什么吗?

i replaced the HttpAplication inheritance in my Global.asax to NinjectHttpApplication:

public class Global : NinjectHttpApplication
{
    protected override IKernel CreateKernel()
    {
        return Bootstrapper.CreateKernel();
    }

    protected override void OnApplicationStarted()
    {
        base.OnApplicationStarted();
        DependencyResolver.SetResolver(new NinjectDependencyResolver(CreateKernel()));
        Bootstrapper.Bootstrap();
    }
}

And my CreateKernel method:

public static IKernel CreateKernel()
{
    var kernel = new StandardKernel();
    kernel.Load(Assembly.GetExecutingAssembly());
    return kernel;
}

I need to use the [Inject] attribute in my RoleService that use RoleProvider and is started by asp.net.

All say that if I inherit from NinjectHttpApplication in my Global.asax I don't need that line: DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); in my OnApplicationStarted method, but without that a exception is thrown and my dependency is NULL in my RoleProvider Service.

After all, I need that line or not? Am I doing something wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心欲静而疯不止 2024-12-04 23:51:47

DependencyResolver 由扩展在启动期间设置。如果该服务是在 ApplicationStart 之前创建的,则将使用默认服务。从你的代码我无法判断它是什么时候创建的。但通常不需要这条线。

您也可以尝试使用NuGet方式来集成Ninject。这将提前启动 Ninject Kernel 和 DependencyResolver。

The DependencyResolver is set by the extension during startup. If the service is created before ApplicationStart then the default one will be used. From your code I cant tell when it gets created. But normally this line shouldn't be required.

You can also try to use the NuGet way to integrate Ninject. This will start the Ninject Kernel and DependencyResolver a bit earlier.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文