2015-02-06 56 views
0

背景 我去冒充我的实际问题之前,这里提供的背景:MVC4 C#项目:在应用程序提供一个对象的单个实例

我在一个ASP.NET MVC 4项目合作在C#中。我目前忙于开发的任务是在此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上的文章,夏侯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上网站查看更多代码示例。

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

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

让我声明我意识到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

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

使用Autofac,登记类,你会做以下的单一实例:

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

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

+0

感谢@halcharger。这是非常容易和快速实施。我想时间会告诉它是否表现良好。 – Ozzy 2015-02-06 10:11:57

相关问题