ninject学习笔记二:单例模式singleton pattern

今天准备学习singleton pattern,顾单词思含义,就是一个实例的意思。单例的实现思路是:私有化构造函数,提供公有方法获取类的实例。下面定义一个音乐播放器类MusicPlayer,观察单例的实现方法

class MusicPlayer
{
    private static readonly MusicPlayer player = new MusicPlayer();
    private MusicPlayer() { }
    public static MusicPlayer GetInstance()
    {
        return player;
    }
}

测试以上代码返回的两个对象是否是同一个

[TestClass]
public class TestMusicPlayer
{
    [TestMethod]
    public void GetPlayer()
    {
        //arrange act
        MusicPlayer player1 = MusicPlayer.GetInstance();
        MusicPlayer player2 = MusicPlayer.GetInstance();

        //assert
        Assert.AreEqual(player1, player2);
    }
}

测试结果:

下面我们来看下ninject中单例的实现

创建NinjectMusicPlayer类和测试类

public class NinjectMusicPlayer
{

}

[TestClass]
public class NinjectMusicPlayerTest
{
    [TestMethod]
    public void GetPlayer()
    {
        //arrange
        IKernel kernel = new StandardKernel();
        kernel.Bind<NinjectMusicPlayer>().ToSelf().InSingletonScope();

        //act
        NinjectMusicPlayer player1= kernel.Get<NinjectMusicPlayer>();
        NinjectMusicPlayer player2 = kernel.Get<NinjectMusicPlayer>();

        //assert
        Assert.AreEqual(player1, player2);
    }
}

测试结果:

疑惑:两次测试的耗时差别较大,是不是ninject的性能比较低呢?留到学完之后再来解决。

在ninject官方文档里面,提到可以设置单例的Scope,我现在的项目暂时不涉及那么多,就先不研究了。以后有时间再来完善这篇文章。

官方文档:http://www.ninject.org/wiki.html

ninject学习笔记二:单例模式singleton pattern

时间: 2024-10-25 07:04:40

ninject学习笔记二:单例模式singleton pattern的相关文章

二十四种设计模式:单例模式(Singleton Pattern)

单例模式(Singleton Pattern) 介绍保证一个类仅有一个实例,并提供一个访问它的全局访问点. 示例保证一个类仅有一个实例. Singleton using System; using System.Collections.Generic; using System.Text; namespace Pattern.Singleton { /// <summary> /// 泛型实现单例模式 /// </summary> /// <typeparam name=&q

Android学习笔记二十之Toast吐司、Notification通知、PopupWindow弹出窗

Android学习笔记二十之Toast吐司.Notification通知.PopupWindow弹出窗 Toast吐司 Toast吐司是我们经常用到的一个控件,Toast是AndroidOS用来显示消息的一种机制,它与Dialog不同,Toast不会获取到焦点,通常显示一段时间之后就会自动消失,下面我们来介绍Toast的几种常用方式: 第一种,默认显示方式,也是最常用的方式: Toast.makeText(MainActivity.this, "这是默认的显示方式", Toast.LE

laravel3学习笔记(二)

原作者博客:ieqi.net ==================================================================================================== 路由 对于web框架而言,路由系统无疑是其中最关键的部分,Laravel3为用户提供了丰富的路由机制,极大的提高了编码效率.laravel3中,路由可以像一般框架那样绑定到controller类上,也可以直接在路由注册函数中利用回调函数实现访问逻辑.路由注册和配置代码

Caliburn.Micro学习笔记(二)----Actions

Caliburn.Micro学习笔记(二)----Actions 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions,看一下Caliburn.Micro给我们提供了多强大的支持 我们还是从做例子开始 demo的源码下载在文章的最后 例子1.无参数方法调用 点击button把textBox输入的文本弹出来 如果textbox里没有文本button不可点,看一下效果图 看一下前台代码 <Stac

2. 蛤蟆Python脚本学习笔记二基本命令畅玩

2. 蛤蟆Python脚本学习笔记二基本命令畅玩 本篇名言:"成功源于发现细节,没有细节就没有机遇,留心细节意味着创造机遇.一件司空见惯的小事或许就可能是打开机遇宝库的钥匙!" 下班回家,咱先来看下一些常用的基本命令. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48092873 1.  数字和表达式 看下图1一就能说明很多问题: 加法,整除,浮点除,取模,幂乘方等.是不是很直接也很粗暴. 关于上限,蛤蟆不太清楚

小猪的数据结构学习笔记(二)

小猪的数据结构学习笔记(二) 线性表中的顺序表 本节引言: 在上个章节中,我们对数据结构与算法的相关概念进行了了解,知道数据结构的 逻辑结构与物理结构的区别,算法的特性以及设计要求;还学了如何去衡量一个算法 的好坏,以及时间复杂度的计算!在本节中我们将接触第一个数据结构--线性表; 而线性表有两种表现形式,分别是顺序表和链表;学好这一章很重要,是学习后面的基石; 这一节我们会重点学习下顺序表,在这里给大家一个忠告,学编程切忌眼高手低,看懂不代表自己 写得出来,给出的实现代码,自己要理解思路,自己

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

马哥学习笔记二十四——分布式复制快设备drbd

DRBD: 主从 primary: 可执行读.写操作 secondary: 文件系统不能挂载 DRBD: dual primay, 双主(基于集群文件系统的高可用集群) 磁盘调度器:合并读请求,合并写请求: Procotol:drbd数据同步协议 A: Async, 异步  数据发送到本机tcp/ip协议栈 B:semi sync, 半同步  数据发送到对方tcp/ip协议 C:sync, 同步  数据到达对方存储设备 DRBD Source: DRBD资源 资源名称:可以是除了空白字符外的任意

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t