背景 在提出我的实际问题之前,我将在此提供背景信息:
我正在使用C#编写ASP.NET MVC 4项目。我忙于处理的当前开发任务是在此Web应用程序中实现RazorMachine(https://github.com/jlamfers/RazorMachine),以便在我的应用程序层中使用Razor引擎(而不是纯粹在MVC Web层中)。我已经在一系列测试夹具中成功实现了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和Factory模式及其可能的实现。但是,使用Singleton似乎并不正确,因为我不是从头编写类,该类已经存在。工厂似乎也不完全合适,但我想听听其他人说的话。
非常感谢所有输入。
答案 0 :(得分: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