gpt4 book ai didi

asp.net-mvc-3 - Mvc 3/Unity 2 将依赖项注入(inject)过滤器?

转载 作者:行者123 更新时间:2023-12-02 03:57:18 30 4
gpt4 key购买 nike

如何注入(inject)以下依赖项?

public class Authenticate : AuthorizeAttribute
{
[Dependency]
public IAuthenticate AuthenticateLibrary { get; set; }

[Dependency]
public ILibrary BaseLibrary { get; set; }

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
}
}

我正在使用 Unity 2 注入(inject)所有 Controller 。有 Unity 2 和将依赖项注入(inject)过滤器的教程吗?

最佳答案

Brad Wilson 在服务位置方面有一个很好的系列,其中包括如何创建自己的可以支持依赖项注入(inject)的过滤器提供程序:http://bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.html (向下滚动到“向过滤器添加依赖注入(inject)”部分)。

  • 复制他为 UnityFilterAttributeFilterProvider.cs 提供的代码。

UnitFilterAttributeFilterProvider.cs

using System.Collections.Generic;
using System.Web.Mvc;
using Microsoft.Practices.Unity;

public class UnityFilterAttributeFilterProvider : FilterAttributeFilterProvider {
private IUnityContainer _container;

public UnityFilterAttributeFilterProvider(IUnityContainer container) {
_container = container;
}

protected override IEnumerable<FilterAttribute> GetControllerAttributes(
ControllerContext controllerContext,
ActionDescriptor actionDescriptor) {

var attributes = base.GetControllerAttributes(controllerContext,
actionDescriptor);
foreach (var attribute in attributes) {
_container.BuildUp(attribute.GetType(), attribute);
}

return attributes;
}

protected override IEnumerable<FilterAttribute> GetActionAttributes(
ControllerContext controllerContext,
ActionDescriptor actionDescriptor) {

var attributes = base.GetActionAttributes(controllerContext,
actionDescriptor);
foreach (var attribute in attributes) {
_container.BuildUp(attribute.GetType(), attribute);
}

return attributes;
}
}
  • 修改 global.asax.cs 的 Application_Start 以使 UnityFilterAttributeFilterProvider 成为 MVC 应用的过滤器提供程序。

protected void Application_Start() {
// ...

var oldProvider = FilterProviders.Providers.Single(
f => f is FilterAttributeFilterProvider
);
FilterProviders.Providers.Remove(oldProvider);

var container = new UnityContainer();
var provider = new UnityFilterAttributeFilterProvider(container);
FilterProviders.Providers.Add(provider);

// ...
}
  • 使用 [Dependency] 属性装饰您希望 Unity 为其注入(inject)值的属性。然后你就可以开始了。

关于asp.net-mvc-3 - Mvc 3/Unity 2 将依赖项注入(inject)过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6121050/

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