首页 新闻 会员 周边 捐助

依赖注入Autofac,winform容器,不能调用同个实例

0
悬赏园豆:50 [待解决问题]

我在winform中采用了Autofac,然后用Microsoft.Practices.ServiceLocation.dll中的ServiceLocator注入。封装成一个类库,供其他的dll调用,我采用了UnitOfWork和repository模式,现在遇到的问题是,我对数据库做成修改后,提交后成功,但是数据库没更新修改。跟踪后发现的问题是,调用的数据工厂不是同个实例。在adp.net中用DependencyResolver.SetResolver这个去创建就没问题。在winform中我用ServiceLocator.Current.GetInstance去调用,它就会创建新的数据工厂实例!help!

问题补充:

用Autofac注册后,在用Common Service Locator,实现 ServiceLocator.SetLocatorProvider(() => new AutofacServiceLocator(container))。但是我要创建的实例,构造函数参数有个数据工厂,用 ServiceLocator.Current.GetInstance去创建这个实例,工厂这个参数都每次不同。也即是说,b和c这两个类构造都引用a。现在我要创建d,d中构造函数引用了b和c,正确的情况是b和c创建的时候也是只用一个a的实例,但是现在确实b和c都各自创建了a的实例。不知道哪里的问题,找了很久。谢谢!

2012-7-27

直接封装了Autofac进行调用。还是出现之前这种症状!头爆了!

CookBlack的主页 CookBlack | 初学一级 | 园豆:104
提问于:2012-07-24 09:21
< >
分享
所有回答(1)
0

看你代码真复杂,IoC创建实例的四种模式:单例,每线程一实例,每调用一实例,每调用一实例(弱引用),当然你还可以扩展实例生命周期的管理策略。

所以你的想想 ServiceLocator 中如何管理实例的生命周期的,又或者你是如何定义你的对象的实例的生命周期的。

Launcher | 园豆:45050 (高人七级) | 2012-07-24 09:45

能否说的详细点,还是有参考的链接,发一个谢谢!

支持(0) 反对(0) CookBlack | 园豆:104 (初学一级) | 2012-07-24 10:04

@CookBlack: 我一直使用的是Unity,没用过你说的Autofac,不过我发现一篇博文,其中的回帖中也提到了实例管理:

还有一个问题,
ContainerBuilder.RegisterType<TImplementor>()
  .As<TService>()
  .InstancePerLifetimeScope()
  //.InstancePerHttpRequest(...)
  //.InstancePerDependency()
As<TService>()后面的函数是什么意思,实例的生命周期?他们的区别?
 
 
你可以参考下。
支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2012-07-24 10:16

@程序猿.码农: 这个在之前就在园里看过了!我现在有点乱,自己还在找原因。可能定义的框架有点问题。还是谢谢!自己在找找原因!

支持(0) 反对(0) CookBlack | 园豆:104 (初学一级) | 2012-07-24 12:29

@CookBlack:亲,,你实现了嘛,可以提供下方法吗?

支持(0) 反对(0) zengql | 园豆:184 (初学一级) | 2015-08-18 09:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册