相关疑难解决方法(0)

如何使用Windsor将依赖项注入ActionFilterAttributes

看过NInject如何做到这一点,AutoFac可以做到这一点我试图弄清楚如何使用Castle Windsor将依赖注入MVC​​ ActionFilters

目前我正在使用一个丑陋的静态IoC助手类来解析构造函数代码中的依赖关系,如下所示:

public class MyFilterAttribute : ActionFilterAttribute
{    
  private readonly IUserRepository _userRepository;
  public MyFilterAttribute() : this(IoC.Resolve<IUserRepository>()) { }
  public MyFilterAttribute(IUserRepository userRepository)
  {
     _userRepository = userRepository;
  }
}
Run Code Online (Sandbox Code Playgroud)

我想从我的过滤器中删除静态反模式IoC的东西.

任何暗示我将如何与温莎城堡一起做这件事?

不,改变DI框架不是一种选择.

asp.net-mvc dependency-injection castle-windsor

17
推荐指数
2
解决办法
8627
查看次数

IFilter提供者和关注点分离

我有一种情况需要在动作过滤器中注入一些依赖项,即我的自定义授权属性中的自定义授权提供程序.我偶然发现了许多人和帖子,他们说我们应该将"属性元数据"与"行为"分开.这是有道理的,而且还有一个事实是过滤器属性没有通过'DependencyResolver'实例化,因此很难注入依赖项.

所以我对我的代码进行了一些重构,我想知道我是否正确(我使用Castle Windsor作为DI框架).

首先,我剥离了我的属性,只包含我需要的原始数据

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyAuthorizeAttribute : Attribute
{
    public string Code { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个自定义授权过滤器,其中包含确定当前用户是否具有适当授权的逻辑

public class MyAuthorizationFilter : IAuthorizationFilter
{
    private IAuthorizationProvider _authorizationProvider;
    private string _code;

    public MyAuthorizationFilter(IAuthorizationProvider authorizationProvider, string code)
    {
        Contract.Requires(authorizationProvider != null);
        Contract.Requires(!string.IsNullOrWhiteSpace(code));

        _authorizationProvider = authorizationProvider;
        _code = code;
    }

    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        if (filterContext.HttpContext.Request.IsAuthenticated)
        {
            BaseController controller = filterContext.Controller as BaseController;
            if (controller != null)
            {
                if …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection asp.net-mvc-filters

12
推荐指数
1
解决办法
5032
查看次数

使用ASP MVC和Castle Windsor将数据库注入到验证属性中

我需要一些帮助 - 我试图在需要进行数据库调用的ASP.NET MVC Web项目中使用自定义验证属性.

我有windsor成功地为控制器工作,并正常注入IRepository接口.当我需要将存储库注入属性类时,问题就出现了.

属性类具有以下代码:

public class ValidateUniqueUrlNodeAttribute : AbstractValidationAttribute
{
    private readonly string message;
    private readonly IArticleRepository articleRepository;

    public ValidateUniqueUrlNodeAttribute(string message)
    {
        this.message = message;
    }

    public ValidateUniqueUrlNodeAttribute(string message, IArticleRepository articleRepository):this(message)
    {
        this.articleRepository = articleRepository;
    }
    public override IValidator Build()
    {
        var validator = new UniqueUrlNodeValidator(articleRepository) { ErrorMessage = message };

        ConfigureValidatorMessage(validator);

        return validator;
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是我似乎无法让Windsor拦截传递给IArticleRepository的属性的构造

我的global.asax文件中的当前代码如下:

container = new WindsorContainer();
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(Container));
   container
     .RegisterControllers(Assembly.GetExecutingAssembly())
     .AddComponent<IArticleRepository, ArticleRepository>()
     .AddComponent<ValidateUniqueUrlNodeAttribute>();
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

c# asp.net-mvc castle-windsor

7
推荐指数
1
解决办法
7837
查看次数