I'm building an ASP.NET MVC site where I'm using Lucene.Net for search queries. I asked a question here about how to properly structure Lucene.Net usage in an ASP.NET MVC application and was told that the best method is to declare the my IndexWriter
as public static
, so that it can be re-used.
Here is some code that is at the top of my SearchController:
public static string IndexLocation = Server.MapPath("~/lucene");
public static Lucene.Net.Analysis.Standard.StandardAnalyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer();
public static IndexWriter writer = new IndexWriter(IndexLocation,analyzer);
As writer
is static, IndexLocation
must also be static. Thus, the compiler is giving me the following error for Server.MapPath()
:
An object reference is required for the non-static field, method, or property 'System.Web.Mvc.Controller.Server.get'
Is there a way of using Server.MapPath() or something similar from a static field? How can I fix this error?
Try HostingEnvironment.MapPath
, which is static
.
See this SO question for confirmation that HostingEnvironment.MapPath
returns the same value as Server.MapPath
: What is the difference between Server.MapPath and HostingEnvironment.MapPath?