【问题标题】:MVC4 C# Project: Provide a single instance of an object across the applicationMVC4 C# 项目:跨应用程序提供对象的单个实例
【发布时间】:2015-02-06 08:31:26
【问题描述】:

背景 在提出我的实际问题之前,我将在这里提供背景:

我正在使用 C# 编写一个 ASP.NET MVC 4 项目。我目前忙于开发的任务是在这个 Web 应用程序中实现 RazorMachine (https://github.com/jlamfers/RazorMachine),以便在我的应用程序层(而不是纯粹在 MVC Web 层)中利用 Razor 引擎。我已经在一系列测试装置中成功实现了 RazorMachine,一切都运行良好。现在,我需要在我的应用层内将它实现到我的应用架构中。

在关于 RazorMachine (http://www.codeproject.com/Articles/423141/Razor-2-0-template-engine-supporting-layouts) 的 CodeProject 文章中,Jaap Lamfers 指出“请注意,通常出于性能原因,在任何应用程序中,您都会创建 RazorMachine 的单例实例(因为内部实例绑定 JIT 创建的类型缓存)” .

一个非常基本的代码示例如下:

RazorMachine rm = new RazorMachine();
ITemplate template = rm.ExecuteContent("Razor says: Hello @Model.FirstName @Model.LastName", 
  new {FirstName="John", LastName="Smith"});
Console.WriteLine(template.Result);

您可以在 CodeProject 网站上查看更多代码示例。

以此为背景,我的问题如下:

向我的 MVC 应用程序提供 RazorMachine 对象的单个实例的最佳方式是什么?

让我声明我知道单例模式和工厂模式及其可能的实现。但是,使用 Singleton 似乎并不合适,因为我不是从头开始编写课程,课程已经存在。工厂似乎也不完全合适,但我想听听别人怎么说。

我们将不胜感激。

【问题讨论】:

    标签: c# asp.net-mvc razor singleton factory


    【解决方案1】:

    获取 RazorMachine 单例实例的最快、最简单的方法是使用您选择的 DI 容器,众所周知的 DI 容器的示例有 Autofac、Ninject、Castle Windsor、Unity、StructureMap(有关主要的 .NET Ioc/DI 容器:http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison)

    这些容器从开发人员那里抽象出正确实现单例模式的责任。

    使用 Autofac,要注册一个类的单例实例,您需要执行以下操作:

    var builder = new ContainerBuilder();
    builder.RegisterType<YourClassGoesHere>().SingleInstance();
    

    参考:http://autofac.readthedocs.org/en/latest/lifetime/instance-scope.html#single-instance

    【讨论】:

    • 谢谢@halcharger。这非常容易和快速实施。我想时间会证明它是否表现良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多