MVC4 C#项目:在整个应用程序中提供一个对象的单个实例



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

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

在他关于RazorMachine的CodeProject文章中(http://www.codeproject.com/Articles/423141/Razor-2-0-template-engine-supporting-layouts),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和Factory模式及其可能的实现。然而,使用Singleton似乎并不合适,因为我不是从头开始写这个类,这个类已经存在了。工厂似乎也不完全合适,但我想听听别人怎么说。

我们将非常感谢所有的投入。

获得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)

这些容器使开发人员不再承担正确实现Singleton模式的责任。

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

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

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

最新更新