如何为我的模型对象集成db4o和autofac?

| 我可以看到如何使用autofac实例化类的对象,然后将它们传递给db4o进行存储。当我该从db4o检索对象实例时,如何在autofac中注册对象? 我最初计划使用db4o的MSBuild工具来实现透明的激活/持久性,但是看起来我可能必须为所有我的Model对象手动实现IActivatable接口,以便可以在
IActivatable::Bind()
中放入额外的代码进行注册
this
指针被激活。 更糟的是,我预见到ѭ0的实现将必须访问当前Autofac生存期范围的Singleton进行注册。显然,我无法将当前生存期范围传递给db4o正在激活的对象实例。就像绕过范围一样糟糕,我可以想象人们考虑将当前的生活范围限制在公共Singleton中时的the吟。 一种替代方法似乎是实现db4o的类型处理程序并在那一刻拦截对象实例化,但这似乎抵消了我使用db4o存储对象所获得的任何收益。 还是我对使用autofac实例化所有对象的想法太疯狂了? (例如,我有一把锤子,一切看起来都像钉子。)是否应该仅通过简单的旧\'new \'以及db4o使用的任何魔法来实例化Model对象?换句话说,仅对我的View,ViewModel和Controller对象使用autofac。     
已邀请:
        我建议用Autofac实例替换每个\'new \'。我的经验法则是,当一个对象需要复杂的依赖关系(不是简单的集合,核心CLR类型,其他简单的对象)时,我就让Autofac完成工作。简单域对象我通常只使用new运算符或创建工厂。 我不确定100%是否能正确回答您的问题。您想在实例化某些服务时将其绑定到您的域模型吗?好吧,我建议使用事件。您可以使用db4o事件来检测对象的存储,激活等时间。在这种事件侦听器中,可以使用当前的Autofac范围传递附加服务。 顺便说一句。 db4o已经调用了IActivatable :: Bind()东西。您无需执行其他任何操作。 通常,我会尝试适当地确定所有范围,而不是将Autofac误用作服务定位器。     
        没有\“ true path \” :),但是这里推荐的方法是避免直接在域模型中使用服务,而是向支持IoC的处理程序调度\ Domain Events \。 吉米·博加德(Jimmy Bogard)关于该主题的帖子很多-有一个StructureMap示例,您应该能够适应Autofac:http://lostechies.com/jimmybogard/2010/08/04/container-friendly-域事件/ (顺便说一句,顺便说一句,顺便说一句,我有一个基于Autofac的示例实现,我将在接下来的几周内对其进行清理。)     

要回复问题请先登录注册