/// <summary> /// 初始化插件。 /// 请勿在此方法调用<see cref="M:FxEcis.T0000.IoC.EcisContainer.Resolve(System.Type)" />、<see cref="M:FxEcis.T0000.IoC.EcisContainer.ResolveAll(System.Type)" />方法,这会导致容器锁定,后续的注册会失败。 /// 如需要解析类型,应该使用<see cref="P:FxEcis.T0000.IoC.EcisContainer.EventAggregator" />获取<see cref="T:FxEcis.T0000.IoC.ContainerEndInitEvent" />事件,然后在事件触发后解析 /// </summary> /// <param name="container">默认的<see cref="T:FxEcis.T0000.IoC.EcisContainer" />容器</param> public override void InitPlugin(EcisContainer container) { //这样是注册一个类型,每次解析时都会新建一个实例对象 //container.Register<ISaveTriageInfo,SaveTriageInfo1>(); //这样是注册到集合 container.RegisterCollection <ISaveTriageInfo>(new [] { typeof(SaveTriageInfo1), typeof(SaveTriageInfo2) }); //SaveTriageInfo2构造参数内包含了ILogger //这里注册后,解析SaveTriageInfo2时,会自动传入Logger的实例 //注册不分先后顺序 container.Register <ILogger, Logger>(); //注册到单个实现和注册到集合并不冲突。具体的解析,可看ResolveIoCPlugin //但是一般不会这样用,程序设计时,应该就确定一个接口能有多少个实现。 //比如说,一个分诊保存的逻辑,只能有一个。但是,病历插入内容模块的接口,可以有插入医嘱、插入检查等等的实现。 //这样注册,是单例模式,容器只会创建一个实例对象,然后将其缓存,每次解析都会返回这个实例。 //container.RegisterSingleton<ISaveTriageInfo, SaveTriageInfo1>(); //这样注册,也是单例模式,这样是自己创建一个实例,这种情况,适用于,构造函数中需要传入int,string等简单类型等情况 //如果是构造函数是可变参数,也需要使用这种方式注册。IoC的内部实现不允许构造函数是可变参数。 //container.RegisterInstance<ISaveTriageInfo>(new SaveTriageInfo1()); //这样注册,会将上面的注册给替换掉,SaveTriageInfo1被替换成SaveTriageInfo2。 //container.Register<ISaveTriageInfo, SaveTriageInfo2>(); //高级注册说明,EcisContainer是其它IoC框架的封装 //如果以上注册方法无法满足需求(这种情况应该很少遇到) //目前内部使用的是SimpleInjector,可查看其文档:https://simpleinjector.readthedocs.io/en/latest/quickstart.html //内部容器在: //container.Container }