asp.net-coreneo4jasp.net-core-mvcasp.net-core-mvc-2.1

Where to Put Neo4j Driver Instance in ASP.NET Core 2.1?


What is the ordinary way to establish connections to Neo4j DB in ASP.NET Core programming?

The code in Neo4j Language Guides (https://neo4j.com/developer/language-guides/) works fine for a simple console app, but it doesn't explain how to code in ASP.NET, so I just copy & pasted the code to MVC scaffold:

  public class TestController : Controller
  {
    public TestController()
    {
      _driver = GraphDatabase.Driver("bolt://localhost"));
    }
    private readonly IDriver _driver;
    public string Index()
    {
      using (var session = _driver.Session())
      {
        var greeting = session.WriteTransaction(tx =>
        {
          var result = tx.Run("CREATE (a:Greeting) " +
                              "SET a.message = $message " +
                              "RETURN a.message + ', from node ' + id(a)",
                       new { message });
          return result.Single()[0].As<string>();
        });
        return greeting;
      }
    }
  }

Works fine but calling GraphDratabase.Driver() for every request doesn't seem to make sense.

Shouldn't it be registered to services? (AddSingleton() in Startup.cs?)

If so, how can I access the driver from the Controller?


Solution

  • Regestring it to services seems to be a good idea. You can do it like:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
    
            services.AddSingleton(GraphDatabase.Driver("bolt://localhost"));
        }
    

    And then inject it to controllers:

    public TestController(IDriver driver)
    {
      _driver = driver;
    }