当前位置: 首页 > 编程语言 > C#

UnitySingleton代码分享

时间:2023-04-10 23:43:44 C#

UnitySingleton代码其他几个对象,下面的一个例子是OperationEntity。因此,当它注册时,它会使用配置文件中的一些值填充Email单例,然后每当创建OperationEntity实例(在我的例子中它被反序列化)时,它都会使用相同的Email单例。因此,我所有的客户端逻辑需要做的就是反序列化OperationEntity并调用PerformAction()-使用Unity处理的电子邮件实例。公共接口IEmail{stringFromName{get;放;}stringFromEmailAddress{得到;放;}}publicclassEmail:IEmail{publicstringFromName{get;放;}publicstringFromEmailAddress{get;放;}publicEmail(stringfromName,stringfromEmailAddress){FromName=fromName;FromEmailAddress=fromEmailAddress;}}publicclassOperationEntity{privatereadonlyIEmail_email;publicintOperationId{得到;放;}publicstringOperationName{get;放;}publicstringToAddress{get;放;}publicOperationEntity(IEmailemail){_email=email;}publicvoidPerformAction(){_email.ToAddress=ToAddress;_email.Body="一些电子邮件正文";_email.Deliver();}}在使用Unity代码工作时,我们将不胜感激;varemail=container.Resolve();container.RegisterType("email",newContainerControlledLifetimeManager(),新的InjectionConstructor(email));首先,您需要一个适当的生命周期管理器,用于单例的ContainerControlledLifetimeManager对于自定义初始化,您可以使用InjectionFactory这允许您编写初始化实体的任何代码。编辑1:这应该有帮助然后varopEntity=container.Resolve();Edit2:为了支持序列化,你必须在反序列化后重建依赖关系:publicclassOperationEntity{//公开并标记为依赖关系[Dependency]publicIEmail_email{get;放;然后OperationEntityentity=somewhatdeserializeit;//让unity重建你的依赖container.BuildUp(entity);你可以使用:container.RegisterType(newContainerControlledLifetimeManager());如果IEmail是一个没有依赖的单例(只是一个自定义参数),你可以自己修改:container.RegisterInstance(newEmail("ToName","to@email.com"));这会将提供的实例注册为容器的单例。然后解决问题:container.Resolve();由于您正在解析具体类型,因此无需注册。尽管如此,如果您希望该服务也成为单例,您可以使用ContainerControlledLifetimeManager注册它,然后所有调用resolve(或将其作为依赖项注入另一个类时)将返回相同的实例:如果所有内容UnitySingleton分享的代码对你有用,需要了解更多C#学习教程,希望大家多多关注—container.RegisterType(newContainerControlledLifetimeManager());本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: