热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#学习教程:动作filter上的简单注入属性注入分享

动作filter上的简单注入属性注入我要注入的动作filter就像这样开始publicclassUserAuthorisation:AuthorizeAttribute{publi

动作filter上的简单注入属性注入

我要注入的动作filter就像这样开始

public class UserAuthorisation : AuthorizeAttribute { public IWcfClientProxy FrameworkServiceProxy { get; set; } 

我已经像这样设置了我的容器:

 container.Register( ()=> new WcfClientProxy()); container.RegisterInitializer(handler => { handler.FrameworkServiceProxy = container .GetInstance(); }); 

当我运行它时, FrameworkServiceProxy属性为null。

我读过这篇文章: Simple Injector:在基类中注入一个属性并按照答案。 我还在本页简单注射器文档中阅读了示例。

我不是注入基类,也许这就是问题所在?

##更新##

我正在添加更多信息,因为我认为它应该是根据史蒂文斯的回答所说的。

我正在使用NuGet包用于MVC 3.这将以下内容添加到应用程序中:

 public static class SimpleInjectorInitializer { /// Initialize the container and register it as MVC3 Dependency Resolver. public static void Initialize() { var cOntainer= new Container(); InitializeContainer(container); container.RegisterMvcControllers(Assembly.GetExecutingAssembly()); container.RegisterMvcAttributeFilterProvider(); container.Verify(); DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container)); } private static void InitializeContainer(Container container) { container.Register(() => new WcfClientProxy()); container.RegisterInitializer(handler => { handler.FrameworkServiceProxy = container.GetInstance(); }); } 

这包括container.RegisterMvcAttributeFilterProvider(); 我现在明白它应该注册一个filter提供者,并且应该意味着通过容器创建filter(这种理解可能是错误的),然后属性自动连线。

我的filter在Global.asax.cs中注册,如下所示:

 public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new UserAuthorisation()); } 

在我看来,filter不是由容器创建的,所以我认为我需要做一些其他事情才能实现这一点?

您正在UserAuthorisation属性上注册初始值设定项。 但是,初始化程序仅在容器本身创建类型时由容器使用。 由于属性是由CLR创建的,因此初始化程序不会关闭。

SimpleInjector.Integration.Web.Mvc.dll( 此NuGet包 )包含RegisterMvcAttributeFilterProvider扩展方法。 这将注册一个AttributeFilterProvider ,它将执行隐式属性注入(并调用container.InjectProperties方法)。 在调用container.RegisterMvcAttributeFilterProvider() ,您将看到自动注入此属性。

我选择了Stevens作为答案,因为它让我得到了一个解决方案,我现在正在使用他在评论中提到的命令处理程序。

我已经做了一个简单的工作来注入我的全局filter。

在App_Start SimpleInjectorInitializer.cs中,我添加了RegisterGlobalFilters如下所示:

 public static void RegisterGlobalFilters(GlobalFilterCollection filters, Container container) { //Add simple injector resolved types. filters.Add(container.GetInstance()); } 

Initialize方法中,我添加了这个RegisterGlobalFilters(GlobalFilters.Filters, container);

完整的方法如下所示:

 /// Initialize the container and register it as MVC3 Dependency Resolver. public static void Initialize() { var cOntainer= new Container(); InitializeContainer(container); container.RegisterMvcControllers(Assembly.GetExecutingAssembly()); container.RegisterMvcAttributeFilterProvider(); container.Verify(); DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container)); RegisterGlobalFilters(GlobalFilters.Filters, container); } 

正如我说的那么简单。 只需从简单的注入器中获取我的实例,然后将它们添加到全局列表中,我相信有更好的方法可以做到这一点。

这种方式意味着您不需要更改global.asax.cs,这可能是一件好事。

上述就是C#学习教程:动作filter上的简单注入属性注入分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记


推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 解决IDEA配置xml文件头报错的方法
    本文介绍了解决IDEA配置xml文件头报错的方法,包括了具体的解决方案和步骤。通过本文的指导,读者可以轻松解决这个问题并正常使用IDEA进行开发工作。 ... [详细]
  • 在C#中,使用关键字abstract来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它只提供部分实现,但可以被其他类继承并创建实例。抽象类可以用于类、方法、属性、索引器和事件。在一个类声明中使用abstract表示该类倾向于作为其他类的基类成员被标识为抽象,或者被包含在一个抽象类中,必须由其派生类实现。本文介绍了C#中抽象类和抽象方法的基础知识,并提供了一个示例代码。 ... [详细]
  • C#设计模式之八装饰模式(Decorator Pattern)【结构型】
    一、引言今天我们要讲【结构型】设计模式的第三个模式,该模式是【装饰模式】,英文名称:DecoratorPattern。我第一次看到这个名称想到的是另外一个词语“装修”,我就说说我对“装修”的理 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
  • 今天写一篇blog,已经多长时间没有更了,两个月了吧,没办法,现在银行开发,不能连外网,天天用虚拟机,真烦今天随手写点东西,主要是这两天对于springboot启动的分析,有所领悟 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • MVC中的自定义控件
    怎么样创建自定义控 ... [详细]
author-avatar
456456
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有