学习prism中关于依赖注入的一点小问题

longhui666888 2010-04-19 01:27:01
仿照prism中的EventAggregation例子做了个练习,建了两个Module的类库,其中有继承于IModule的ModuleA,ModuleB,我看附带的例子和网上的例子,有把构造函数写成
public ModuleA(IUnityContainer container, IRegionManager regionManager)的,也有写成
public ModuleA(IRegionManager regionManager, IEventAggregator eventAggregator)的。

然后在Bootstrapper中 Container.Resolve<ModuleA>()返回一个实例,我想知道传进构造函数的参数是从哪来的?是固定有几种写法呢,还是可以例用任何类型,任何个数的参数?

如果有人能说下Microsoft.Practices.Unity.dll中带的这个Container的原理和用法就更好了。多谢
...全文
570 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
longhui666888 2010-04-24
  • 打赏
  • 举报
回复
谢谢你
seeyou1997 2010-04-21
  • 打赏
  • 举报
回复
这些类Container都会帮你维护的,也就是说默认情况下都是同一个实例
longhui666888 2010-04-21
  • 打赏
  • 举报
回复
谢谢楼上的回复。请问使用.Resolve<ModuleA>()反回一个实例的时候,如果构造函数需要参数,Container会自动再生成一个参数么?如果参数的构造函数还需要参数,会不会这样递归下去?之所以这样想,是因为我想找到传进ModuleA的EventAggregator是从哪来的,可是却没发现。
seeyou1997 2010-04-20
  • 打赏
  • 举报
回复
RegisterInstance. This method registers with the container an existing instance of a type that you specify, with the lifetime that you specify. The container will return the existing instance during that lifetime. If you do not specify a value for the lifetime, the instance will have the default container-controlled lifetime. It will return a reference to the original object on each call to Resolve.


RegisterType. This method registers a type with the container. At the appropriate time, the container will build an instance of the type you specify. This could be in response to dependency injection, through class attributes, or when you call the Resolve method. The lifetime of the object it builds will correspond to the lifetime you specify in the parameters of the method. If you do not specify a value for the lifetime, the type is registered for a transient lifetime, which means that a new instance will be created on each call to Resolve.

我想你用的应该是RegisterInstance方法,并且没有指定lifetime,这样container就只会返回你注册的对象,如果你用RegisterType方法,那么container每次会返回不同的对象给你。

至于构造函数,应该是跟你的具体需要有关,如果你需要用到Container,EventAggregator或者RegionManager的时候,就放到你的构造函数里面
longhui666888 2010-04-19
  • 打赏
  • 举报
回复
网上有对Container的介绍,我也实验了一下,在Bootstrapper的protected override void InitializeModules()中,用Resolve方法返回了一个对象,得出一个结论:调用同一个Container的Resolve方法时,对于同一个类型,返回的是同一实例,这就是所谓的“单例模式”吧.

对于类的构造函数中的参数,Container也会自动以“单例”方式new一个出来么?太神奇了。求证实。
内容概要:本文围绕“单相逆变器闭环逆变电路PWM模型仿真研究”展开,基于Simulink平台构建单相逆变器的闭环控制系统仿真模型,重点研究PWM调制技术在逆变电路的应用与实现。文详细阐述了系统架构设计、电压电流双闭环控制策略的实现原理、控制器参数设计及仿真建模全过程,并通过仿真结果验证了控制方案在动态响应、稳态精度与系统稳定性方面的有效性。同时,文档还涵盖多种电力电子系统典型应用场景,如多类型短路故障仿真(性点不接地、经小电阻接地、经消弧线圈接地等)、软开关技术、微电网能量管理、MPPT控制等,体现出较强的技术综合性和工程实践价值。; 适合人群:电气工程、自动化、电力电子与新能源等相关专业的高校本科生、研究生、科研人员,以及从事电力系统仿真、逆变器设计与新能源并网技术研发的工程技术人员。; 使用场景及目标:①掌握基于Simulink的单相逆变器闭环控制系统建模与PWM仿真方法;②深入理解双闭环控制、SPWM/SVPWM调制、系统稳定性分析等核心技术原理;③为课程设计、毕业设计、科研项目或实际工程开发提供可复用的仿真模型与技术支持; 阅读建议:建议结合文仿真模型动手实践,重点掌握PI控制器参数整定、PWM信号生成机制与仿真结果分析方法,同时可延伸学习文档涉及的软开关、故障仿真、微电网控制等关联技术,以拓展系统级设计能力。

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧