2010-12-20 2 views
6

Ich habe ein Problem mit dem Ninject.Ninject + ASP.NET MVC + InRequestScope

Meine verbindliche Regeln:

this.Bind<ISphinxQLServer>().To<SQLServer>(); 
this.Bind<IMySQLServer>().To<SQLServer>(); 

this.Bind<ISQLLogger>().To<StandardSQLLogger>() 
    .InRequestScope(); 

this.Bind<DatabaseConnections>() 
    .ToMethod(x => ConnectionFactory.GetConnections()) 
    .InRequestScope(); 

this.Bind<SQLServer>().ToSelf() 
    .InRequestScope() 
    .WithConstructorArgument("connections", Kernel.Get<DatabaseConnections>()) 
    .WithConstructorArgument("logger", Kernel.Get<ISQLLogger>()); 

Wo

SQLServer, ISphinxQLServer und IMySQLServer sind:

public class SQLServer: ISphinxQLServer, IMySQLServer 
{ 
    public DatabaseConnections Connections { get; internal set; } 
    public ISQLLogger Logger { get; internal set; } 

    public SQLServer(DatabaseConnections connections) 
    { 
     this.Connections = connections; 
    } 

    public SQLServer(DatabaseConnections connections, ISQLLogger logger) 
    { 
     this.Connections = connections; 
     this.Logger = logger; 
    } 
} 

Ich möchte, dass jeder Benutzer Anfrage an meine asp.net Mvc-Website erstellt ein einzelner SQL Server, ein einzelner ISQLLogger und eine einzelne DatabaseConnections. Aber meine Lösung funktioniert nicht. Was mache ich falsch? . = (

Antwort

6

Sie brauchen nicht die WithConstructorArgument geben Sie die Parameter Beheben von den Konstrukteuren des injizierten Objekte ist Teil dessen, was Ninject Sie sich für So sind die Definitionen eher wie dieses aussehen:.

this.Bind<SQLServer>() 
    .ToSelf() 
    .InRequestScope(); 

this.Bind<ISphinxQLServer>() 
    .ToMethod(x => x.Kernel.Get<SQLServer>()); 

this.Bind<IMySQLServer>() 
    .ToMethod(x => x.Kernel.Get<SQLServer>()); 

this.Bind<ISQLLogger>() 
    .To<StandardSQLLogger>() 
    .InRequestScope(); 

this.Bind<DatabaseConnections>() 
    .ToMethod(x => ConnectionFactory.GetConnections()) 
    .InRequestScope(); 
+0

Danke, das hat mir bei einem ähnlichen Problem geholfen. –