我有一个Ninject IoC容器,它有很多绑定。我在我的linqpad脚本中绑定。
但是,当我尝试多次运行时,这会失败,因为在第二次运行时会有多个相同类型的绑定,所以当我尝试从IoC容器中获取它时会失败。
我是否在Ninject中使用了应用程序启动或初始化函数,因此绑定只发生一次?
例如,在MVC程序中,我将使用Application_Start()
示例:在此程序中,每次运行程序时,输出计数都会增加。是否有可以挂钩的应用程序启动事件来重置计数?
我的实际需求是防止ninject内核的双重绑定,所以请不要修复单例的“解决方案”,我知道它不是线程安全的等等!
void Main()
{
{
var x = Singleton.Instance;
Console.WriteLine(x.count++);
}
}
// Define other methods and classes here
public class Singleton
{
private static Singleton instance;
private Singleton() { }
public int count;
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
instance.count = 0;
}
return instance;
}
}
}
答案 0 :(得分:1)
我没有意识到LinqPad中的静态发生了这种情况。很好找。
您是否尝试使用Application_Start()
类中的标记将Singleton
的呼叫包裹起来,与您使用if(instance == null)
的方式类似。
像...一样的东西。
private static bool _initialised;
public static void Initialise()
{
if(_initialised)
return;
_initialise = true;
something.Application_Start();
}