(精华)2020年8月19日 ASP.NET MVC 控制器工厂实现Unity容器注入
发布日期:2021-06-29 15:10:24
浏览次数:2
分类:技术文章
本文共 4108 字,大约阅读时间需要 13 分钟。
DI工厂
public class DIFactory{ private static IUnityContainer _Container = null; private readonly static object DIFactoryLock = new object(); public static IUnityContainer GetContainer() { if (_Container == null) { lock (DIFactoryLock) { if (_Container == null) { //container.RegisterType ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); fileMap.ExeConfigFilename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "CfgFiles\\Unity.Config"); Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName); _Container = new UnityContainer(); section.Configure(_Container, "ruanmouContainer"); } } } return _Container; }}
Unity配置文件
AOP相关
public class LogAfterBehavior : IInterceptionBehavior{ public IEnumerableGetRequiredInterfaces() { return Type.EmptyTypes; } public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext) { IMethodReturn methodReturn = getNext()(input, getNext); Console.WriteLine("这里是方法执行后。。。"); return methodReturn; } public bool WillExecute { get { return true; } }}/// /// 不需要特性/// public class LogBeforeBehavior : IInterceptionBehavior{ public IEnumerableGetRequiredInterfaces() { return Type.EmptyTypes; } public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext) { //Session ///这里是方法执行前 Console.WriteLine("这里是方法执行前"); return getNext().Invoke(input, getNext); } public bool WillExecute { get { return true; } }}
public class XTControllerFactory : DefaultControllerFactory{ private Logger logger = new Logger(typeof(XTControllerFactory)); protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { this.logger.Warn($"{controllerType.Name}被构造..."); IUnityContainer container = DIFactory.GetContainer(); //return base.GetControllerInstance(requestContext, controllerType); return (IController)container.Resolve(controllerType); }}
全局注册
protected void Application_Start(){ AreaRegistration.RegisterAllAreas();//注册区域 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);//注册全局的Filter RouteConfig.RegisterRoutes(RouteTable.Routes);//注册路由 BundleConfig.RegisterBundles(BundleTable.Bundles);//合并压缩 ,打包工具 Combres ControllerBuilder.Current.SetControllerFactory(new XTControllerFactory()); this.logger.Info("网站启动了。。。");}
使用
public class ThirdController : Controller{ private IUserService _iUserService = null; private ICompanyService _iCompanyService = null; private IUserCompanyService _iUserCompanyService = null; ////// 构造函数注入---控制器得是由容器来实例化 /// /// /// /// public ThirdController(IUserService userService, ICompanyService companyService, IUserCompanyService userCompanyService) { this._iUserService = userService; this._iCompanyService = companyService; this._iUserCompanyService = userCompanyService; } // GET: Third public ActionResult Index() { //JDDbContext context = new JDDbContext(); //IUserService service = new UserService(context); IUserService service = this._iUserService; User user = service.Find(2); return View(); }}
转载地址:https://codeboy.blog.csdn.net/article/details/108096060 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月30日 05时36分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何设计自己的第一个加密交易机器人?
2019-04-29
浪费在Excel上的时间:如何开始专家式机器学习实验追踪?
2019-04-29
失业三星期:我寻找第二份编程工作之路
2019-04-29
跳过媒介,我们能不能只用思想控制计算机?
2019-04-29
服务器宕机:谷歌最近经历了“黑客攻击”吗?
2019-04-29
RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大
2019-04-29
提升查询技能,这7条SQL查询错误必须解决
2019-04-29
TKDE 2020 | 综述:基于知识图谱的推荐系统
2019-04-29
休息时间!哪些业余活动能提升开发人员的技能?
2019-04-29
把人脑“森林”上传到计算机:人类脑计划只是一个科幻野心?
2019-04-29
智力测试:如何超越动物之智?
2019-04-29
事关人类生存?为什么要探寻AI系统的可解释性?
2019-04-29
安全工程师必知:常见Java漏洞有哪些?
2019-04-29
数据科学中的计量经济学技术
2019-04-29
突破边界:数据科学、数据工程和技术的未来
2019-04-29
一切有迹可循!优秀程序员的9个早期迹象
2019-04-29
在后台的python:众多程序员无法攻克的难题
2019-04-29
未来战争:装载AI的美国空军侦察机已经试飞……
2019-04-29
屡战屡败:为什么你会觉得学习编程很难?
2019-04-29
“狙击”特斯拉:电动汽车后起之秀的最后一战
2019-04-29