Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态更改连接字符串时发出Rebind NInject_C#_.net_Ninject - Fatal编程技术网

C# 动态更改连接字符串时发出Rebind NInject

C# 动态更改连接字符串时发出Rebind NInject,c#,.net,ninject,C#,.net,Ninject,在连接字符串中,我应该使用连接字符串中的属性application name=userid动态传递loggeduserid值,并使用查询select app_name()进入SQL Server 使用的技术: 1) .NET4.0 2) 亚硝酸铵 3) 尼尼特 在登录之前,我使用Ninject IoC容器和NHibernate加载连接字符串,而不使用application name属性;在登录之后,我将记录的用户id作为构造函数值传递,并重新绑定NhibernateConfiguration类,

在连接字符串中,我应该使用连接字符串中的属性application name=userid动态传递loggeduserid值,并使用查询select app_name()进入SQL Server

使用的技术: 1) .NET4.0 2) 亚硝酸铵 3) 尼尼特

在登录之前,我使用Ninject IoC容器和NHibernate加载连接字符串,而不使用application name属性;在登录之后,我将记录的用户id作为构造函数值传递,并重新绑定NhibernateConfiguration类,如下所示

在登录之前,注入NHibernateConfiguration

public override void Load()
        {
            Bind<ISession>().ToMethod(x => x.Kernel.Get<NHibernateConfiguration>()
                                               .GetSessionFactory()
                                               .OpenSession());

            Bind<ISessionFactory>().ToMethod(x => x.Kernel.Get<NHibernateConfiguration>().GetSessionFactory());

        }
public override void Load()
{
Bind().ToMethod(x=>x.Kernel.Get())
.GetSessionFactory()
.OpenSession());
Bind().ToMethod(x=>x.Kernel.Get().GetSessionFactory());
}
登录后,使用构造函数参数传递loggeduserid,如下所示

using (var kernal = ServiceLocator.GetKernel())
{
 kernal.Rebind<NHibernateConfiguration>().To<NHibernateConfiguration>()
.WithConstructorArgument("loggedUserId", user.Id);
}
使用(var kernal=ServiceLocator.GetKernel())
{
kernal.Rebind()到()
.WithConstructorArgument(“loggedUserId”,user.Id);
}
但我无法重新绑定或注入NHibernateConfiguration类


请帮助我如何使用Ninject重新绑定NHibernateConfiguration类在应用程序执行期间不要使用重新绑定。这会导致许多问题。改用有条件投标:

kernel.Bind<NHibernateConfiguration>().To<NHibernateConfiguration>();
kernel.Bind<NHibernateConfiguration>().To<NHibernateConfiguration>()
      .When(ctx => IsLoggedIn())
      .WithConstructorArgument("loggedUserId", request => user.Id);

private bool IsLoggedIn()
{
     // add code to decide if the user is logged in
}
kernel.Bind().To();
kernel.Bind()到()
.When(ctx=>IsLoggedIn())
.WithConstructorArgument(“loggedUserId”,请求=>user.Id);
private bool IsLoggedIn()
{
//添加代码以确定用户是否已登录
}
此外,会话绑定也没有多大意义。它应该得到会话工厂

Bind<ISession>().ToMethod(x => x.Kernel.Get<ISessionFactory>()
                .OpenSession());
Bind().ToMethod(x=>x.Kernel.Get())
.OpenSession());

在应用程序执行期间不要使用重新绑定。这会导致许多问题。改用有条件投标:

kernel.Bind<NHibernateConfiguration>().To<NHibernateConfiguration>();
kernel.Bind<NHibernateConfiguration>().To<NHibernateConfiguration>()
      .When(ctx => IsLoggedIn())
      .WithConstructorArgument("loggedUserId", request => user.Id);

private bool IsLoggedIn()
{
     // add code to decide if the user is logged in
}
kernel.Bind().To();
kernel.Bind()到()
.When(ctx=>IsLoggedIn())
.WithConstructorArgument(“loggedUserId”,请求=>user.Id);
private bool IsLoggedIn()
{
//添加代码以确定用户是否已登录
}
此外,会话绑定也没有多大意义。它应该得到会话工厂

Bind<ISession>().ToMethod(x => x.Kernel.Get<ISessionFactory>()
                .OpenSession());
Bind().ToMethod(x=>x.Kernel.Get())
.OpenSession());

在您的示例中,您实际上根本没有绑定NHibernateConfiguration(您需要先调用.Bind,然后才能调用.Rebind),同样在旁注中,Ninject不是一个真正的服务定位器,即使它可以用作一个,通常在构造函数/参数注入场景中使用ninject在您的示例中,您根本没有绑定NHibernateConfiguration(您需要在调用.Rebind之前调用.Bind),另一方面,ninject不是真正的服务定位器,即使它可以用作一个,通常在构造函数/参数注入场景中使用ninject