gpt4 book ai didi

asp.net-mvc-3 - ASP.NET MVC 3 和全局过滤器注入(inject)

转载 作者:行者123 更新时间:2023-12-04 14:51:25 24 4
gpt4 key购买 nike

您好,我正在尝试使用注入(inject)实现全局过滤器。
过滤器看起来像这样。

public class WikiFilter : IActionFilter
{
private IWikiService service;

public WikiFilter(IWikiService service)
{
this.service = service;
}

public void OnActionExecuting(ActionExecutingContext filterContext)
{
!!!Code here!!
}

public void OnActionExecuted(ActionExecutedContext filterContext)
{
throw new NotImplementedException();
}
}

我已经在我的 global.asax 中以以下方式附加了带有注入(inject)的过滤器。
      public class MvcApplication : System.Web.HttpApplication, 
IAuthenticationApplication<User>
{
protected void Application_Start()
{
Ninject();
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
RegisterGlobalFilters(GlobalFilters.Filters);
}

private void Ninject()
{
// Create Ninject DI kernel
IKernel kernel = new StandardKernel();

kernel.Bind<DataContext>().ToSelf().InRequestScope();
kernel.Bind<IWikiRepository>().To<WikiRepository>();
kernel.Bind<IWikiService>().To<WikiService>();

// Global filters
kernel.BindFilter<WikiFilter>(FilterScope.Global, 0);

DependencyResolver.SetResolver
(new NinjectDependencyResolver(kernel));
}
}

但是由于某种原因,当应用程序运行时过滤器从未被触发,我没有正确实现它吗?

最佳答案

我建议您使用 ~/App_Start/NinjectMVC3.cs配置 Ninject 内核的文件:

[assembly: WebActivator.PreApplicationStartMethod(typeof(AppName.App_Start.NinjectMVC3), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(AppName.App_Start.NinjectMVC3), "Stop")]

namespace AppName.App_Start
{
using System.Web.Mvc;
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using Ninject;
using Ninject.Web.Mvc;
using Ninject.Web.Mvc.FilterBindingSyntax;

public static class NinjectMVC3
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();

/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
bootstrapper.Initialize(CreateKernel);
}

/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}

/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
RegisterServices(kernel);
return kernel;
}


/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<DataContext>().ToSelf().InRequestScope();
kernel.Bind<IWikiRepository>().To<WikiRepository>();
kernel.Bind<IWikiService>().To<WikiService>();
kernel.BindFilter<WikiFilter>(FilterScope.Global, 0);
}
}
}

Global.asax 保持不变。顺便说一下,这是安装 Ninject.MVC3 NuGet 包时的默认设置。

关于asp.net-mvc-3 - ASP.NET MVC 3 和全局过滤器注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5790047/

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