C# NancyFx和TinyIoC为模块提供单个实例
我有一个相当简单的问题。我正在使用Nancy,通过构造函数autoresolve传递一个windows窗体。如果我让nancy自动解析每个模块,它会创建表单的新实例,这不是我想要的。我想也许我可以在TinyIoC中注册我的表单实例,然后它总是使用这个实例,而不是每次创建一个新实例。但事实证明,这并不像这个想法那么容易实现C# NancyFx和TinyIoC为模块提供单个实例,c#,nancy,tinyioc,C#,Nancy,Tinyioc,我有一个相当简单的问题。我正在使用Nancy,通过构造函数autoresolve传递一个windows窗体。如果我让nancy自动解析每个模块,它会创建表单的新实例,这不是我想要的。我想也许我可以在TinyIoC中注册我的表单实例,然后它总是使用这个实例,而不是每次创建一个新实例。但事实证明,这并不像这个想法那么容易实现 提前感谢我没有将窗口引用分配给构造函数,而是将其注册到TinyIoC并在默认构造函数中解析,从而解决了这个问题 //Registering in form var contai
提前感谢我没有将窗口引用分配给构造函数,而是将其注册到TinyIoC并在默认构造函数中解析,从而解决了这个问题
//Registering in form
var container = TinyIoCContainer.Current;
container.Register<IMessageDeliverer>(this);
//Resolving in Module Constructor
var container = TinyIoCContainer.Current;
IMessageDeliverer mdl = container.Resolve<IMessageDeliverer>();
setDeliverer(mdl);
我没有将窗口引用分配给构造函数,而是将其注册到TinyIoC并在默认构造函数中解析,从而解决了这个问题
//Registering in form
var container = TinyIoCContainer.Current;
container.Register<IMessageDeliverer>(this);
//Resolving in Module Constructor
var container = TinyIoCContainer.Current;
IMessageDeliverer mdl = container.Resolve<IMessageDeliverer>();
setDeliverer(mdl);
您可能应该在引导程序中执行此操作 比如:
public class MyBootstrapper: DefaultNancyBootstrapper
{
ConfigureApplicationContainer (TinyIoCContainer container)
{
//the .AsSingleton() instructs TinyIOC to make only one of those.
container.Register<IMessageDeliverer>().AsSingleton();
base.ConfigureApplicationContainer (container);
}
}
您可能应该在引导程序中执行此操作 比如:
public class MyBootstrapper: DefaultNancyBootstrapper
{
ConfigureApplicationContainer (TinyIoCContainer container)
{
//the .AsSingleton() instructs TinyIOC to make only one of those.
container.Register<IMessageDeliverer>().AsSingleton();
base.ConfigureApplicationContainer (container);
}
}