我正在尝试获得一个与 Autofac 一起使用的 Singleton 实例。我正在用 Winforms 做一个准 mvvm 类型的事情,只是一个实验,所以不要挂断它。但我正在尝试让我的模型成为单个实例,并在命令中引用(此处的 ICommand 不是 WPF 变体):
我对容器进行了以下设置:
var cb = new ContainerBuilder();
cb.RegisterType<CalculateCommissionCommand>().As<ICommand<TradeEntry>>().SingleInstance();
cb.RegisterType<CalculationsModel>().As<ICalculationsModel>().SingleInstance();
cb.Register(c => new CalculationsView() { Model = c.Resolve<ICalculationsModel>() }).SingleInstance();
cb.Build();
现在,该命令采用 ICalculationsModel 作为构造函数参数。但是,当我在传递给命令的模型中设置值时,该值不会出现在已使用 CalculationsView 设置的模型中。尽管调用了“singleInstance”方法,但命令和视图似乎正在传递 CalculationsModel 的不同实例。我错过了什么吗?为什么会发生这种情况?
我们今天遇到了类似的问题,这似乎是唯一提出这个问题的帖子,所以我想我会分享我们的经验,希望它能帮助别人。最后,它就在我们眼前,当然它们通常是最难解决的问题:-)。
在我们的场景中,我们是:
- 注册配置提供程序的特定实现
- 自动注册程序集中的某些类型。
沿着这些思路:
var cb = new ContainerBuilder();
cb.RegisterType<FileBasedConfigurationProvider>()
.As<IConfigurationProvider>()
.SingleInstance();
cb.RegisterAssemblyTypes(typeof(MailProvider).Assembly)
.Where(t => !t.IsAbstract && t.Name.EndsWith("Provider"))
.AsImplementedInterfaces();
愚蠢的是,我们没有想到/意识到FileBasedConfigurationProvider
与MailProvider
,所以第二个注册调用基本上覆盖了第一个;因此,SingleInstance
“没有工作”。
希望能帮助别人!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)