Unity单例代码

2024-01-15

我是新来的Unity http://unity.codeplex.com/我正在尝试编写一些 Unity 逻辑来初始化和注册/解析 Email 对象的单例实例,以便它可以在多个其他对象中使用,下面的一个示例是 OperationEntity。

因此,当它注册时,它会使用配置文件中的一些值填充电子邮件单例,然后每当创建 OperationEntity 的实例(在我的例子中它正在被反序列化)时,它都会使用相同的电子邮件单例。因此,我的所有客户端逻辑需要做的就是反序列化 OperationEntity 并调用 PerformAction() - 电子邮件实例由 Unity 处理。

public interface IEmail
{
    string FromName { get; set; }
    string FromEmailAddress { get; set; }
}

public class Email : IEmail
{
    public string FromName { get; set; }
    public string FromEmailAddress { get; set; }

    public Email(string fromName, string fromEmailAddress)
    {
        FromName = fromName;
        FromEmailAddress = fromEmailAddress;
    }
}

public class OperationEntity
{
    private readonly IEmail _email;

    public int OperationId { get; set; }
    public string OperationName { get; set; }
    public string ToAddress { get; set; }

    public OperationEntity(IEmail email)
    {
        _email = email;
    }

    public void PerformAction()
    {
        _email.ToAddress = ToAddress;
        _email.Body = "Some email body";
        _email.Deliver();
    }
}

任何帮助让这个 Unity 代码正常工作的帮助将不胜感激

    public static void Register(IUnityContainer container)
    {
        container
            .RegisterType<IEmail, Email>(
            new InjectionFactory(c => new Email(
                "To Name", 
                "[email protected] /cdn-cgi/l/email-protection")));

        var email = container.Resolve<IEmail>();  

        container.RegisterType<OperationEntity>(
            "email", new ContainerControlledLifetimeManager(),
            new InjectionConstructor(email));
    }

首先,你需要一个合适的终身经理 http://msdn.microsoft.com/en-us/library/ff647854.aspx the ContainerControlledLifetimeManager是针对单身人士的。

对于自定义初始化,您可能可以使用InjectionFactory http://bartwullems.blogspot.com/2011/03/unity-injectionfactory.html

这使您可以编写初始化实体的任何代码。

编辑1:这应该有帮助

public static void Register(IUnityContainer container)
{
    container
        .RegisterType<IEmail, Email>(
        new ContainerControlledLifetimeManager(),
        new InjectionFactory(c => new Email(
            "To Name", 
            "[email protected] /cdn-cgi/l/email-protection")));
}

and then

var opEntity = container.Resolve<OperationEntity>();

Edit2:为了支持序列化,您必须在反序列化后重建依赖项:

public class OperationEntity
{
   // make it public and mark as dependency   
   [Dependency]
   public IEmail _email { get; set;}

}

and then

OperationEntity entity = somehowdeserializeit;

// let unity rebuild your dependencies
container.BuildUp( entity );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity单例代码 的相关文章

随机推荐

  • Webkit 浏览器根据 colspan 渲染表格

    请告知我是否出现幻觉 我希望如此 因为我无法根据浏览器正确渲染表格 我希望有人能为我提供解决方案 我的问题是 某些表格在使用 webkit 的浏览器 即 Safari 和 Chrome 中不显示右侧边框 根据帮助下的关于菜单项 我使用的 S
  • VBA 使用 OFT 模板从 Excel 发送电子邮件 - 禁止自动签名

    我创建了一个宏 用于打开 Outlook 电子邮件模板以供用户发送 以及从电子表格中提取的一些附加信息 一切都很顺利 只是 Outlook 会根据用户设置自动附加签名 虽然我可以很容易地关闭自己的签名 但我并不是唯一可能运行此宏的人 电子邮
  • “docker ps -a”是什么意思?

    经常使用 Docker 的任何人都熟悉常用命令docker ps and docker ps a 我知道docker ps列出了 Docker 引擎中所有正在运行的容器 但是 ps 实际上意味着什么 我也知道docker ps a具有还列出
  • 使用 FOP 中的 OutputStream 渲染图像

    我想在 PDF 上渲染图像 该图像将由 FOP 生成 为了渲染图像 我使用标签
  • 手动将搭配添加到 gensim 短语器

    我正在对语言学论文进行主题建模 并使用 Gensim 短语来识别频繁的搭配 我希望能够将术语 do support 和 it clefts 标记为一个单词 因为它们是特定的语言术语 但是 如果我在取出停用词后制作 Gensim 模型 则不会
  • MSHTML:CreateDocumentFromString 而不是 CreateDocumentFromUrl

    我想使用 MSHTML 库来解析字符串变量中的一些 HTML 但是 我不知道该怎么做 我可以轻松解析给定已知 URL 的网页内容 但不能直接解析源 HTML 这可能吗 如果是这样 怎么办 Public Sub ParseHTML sHTML
  • 身份验证和资源服务器之间的 OAuth v2 通信

    我在理解 OAUTH v2 的工作原理时遇到一些困难 The OAuth 版本 2 规范 https datatracker ietf org doc html draft ietf oauth v2 16 section 7 reads
  • 反射式获取项目中的所有包?

    如何反思性地获取项目中的所有包 我从 Package getPackages 开始 但这只获取了与当前包关联的所有包 有没有办法做到这一点 PhilippWendler 的评论让我找到了一种完成我需要的方法 我稍微调整了该方法以使其递归 R
  • 错误 4:从“错误”中选择“消息”,其中“错误”= 1707(也是 1709)

    我使用 WiX 3 8 创建了一个 MSI 安装程序 安装时在 MSI 日志的最后出现此错误 Property C WIXUI INSTALLDIR VALID 1 Logging stopped 8 20 2014 19 15 03 No
  • Keycloak - Infinispan Redis 缓存存储

    目前正在以standalone ha模式设置keycloak集群 以便能够在docker swarm上运行 在 keycloak 中 用户会话缓存在嵌入式 infinispan 存储中 并且 infinispan 可以配置为跨集群的分布式缓
  • 函子定律是否证明了结构的完全保留?

    在文档中数据函子 http hackage haskell org package base docs Data Functor html以下两条被规定为函子法则 所有函子都应遵守 fmap id id fmap f g fmap f fm
  • makecontext 参数 #2 的 C++0x lambda

    我在将 C 0x lambda 函数作为第二个参数传递给makecontext 来自 ucontext h 的签名makecontext is void makecontext ucontext t void int 以前 我能够应用 C
  • 忽略模糊匹配并使用 javascript 添加精确的单词模式匹配

    我正在尝试为我的网站创建一个文本突出显示选项 但我想要精确的单词匹配而不是模糊的单词匹配 我的代码匹配所有类型的实例 并且存在一些区分大小写的问题 如果我们以 Jfiddle 为例 我只想添加这个词cancer 区分大小写不应该成为问题 并
  • 如何从维基百科中获取纯文本

    我想编写一个仅获取维基百科描述部分的脚本 也就是说 当我说 wiki bla bla bla 它将转到维基百科页面为bla bla bla http en wikipedia org wiki Bla Bla Bla 获取以下内容 并将其返
  • 如何在运行时获取NHibernate在代码中生成的SQL?

    我知道您可以通过将 NHibernate 生成的 SQL 连接到 log4net 或通过管道将其输出到控制台 show sql 选项 来查看 NHibernate 生成的 SQL 但是有没有办法在运行时在代码中获取生成的 SQL 我希望能够
  • Excel VBA - 网页抓取 - 获取 HTML 表格单元格中的值

    我正在尝试创建一个宏来抓取货物跟踪网站 但我必须创建 4 个这样的宏 因为每家航空公司都有不同的网站 我是 VBA 和网页抓取的新手 我已经整理了适用于 1 个网站的代码 但当我尝试将其复制到另一个时 我陷入了循环 我想这可能是我指代该元素
  • Excel VBA:将计算结果数组作为参数传递给函数

    我有一个接受数组的 VBA 函数 如果我向它传递一个引用 例如A1 A10 它不接受 公式 参数 例如A1 A10 1 or A1 A10 2 生成的单元格包含 VALUE 许多Excel函数都支持这一点 例如linest 我可以编写以下公
  • 如何解决 R Markdown (Knit)“‘closure’不可子集化”?

    我第一次尝试使用 RMarkdown Knit 来生成 pdf 默认文件 文件 gt 新建文件 gt R Markdown 运行良好 它显示编译时生成的 pdf 例如 运行以下代码 r cars summary cars 但是 如果我只是用
  • Meteor collection.insert回调问题

    根据 Meteor 文档 collection insert doc callback callback功能 选修的 如果存在 则使用错误对象作为第一个参数和 id 作为第二个参数进行调用 然后往下 在服务器上 如果您不提供回调 则插入块直
  • Unity单例代码

    我是新来的Unity http unity codeplex com 我正在尝试编写一些 Unity 逻辑来初始化和注册 解析 Email 对象的单例实例 以便它可以在多个其他对象中使用 下面的一个示例是 OperationEntity 因