我想用Typhoon框架注入NSManagedObject子类。我没有看到这方面的例子,但我认为这可能是可能的。
我正在使用MO Generator,并且在NSManagedObject和最终的子类之间有一个超类。它在这个常见的抽象基类中,如果这有任何区别,我想要注入。
有没有人有过这方面的成功?
任何建议都将不胜感激。如果有更多我可以提供的信息,请告诉我。
答案 0 :(得分:3)
使用Typhoon设置核心数据:
首先,如果你想用Typhoon设置核心数据,以便你可以将数据源注入你的视图控制器,那么Typhoon+CoreData+RAC样本应用程序是由{{3}发布的}}。它显示:
在此示例中。 。 。
顶级汇编为Ryoichi Izumita
核心数据汇编:
主程序集引用辅助程序集 - category on NSManagedObjectContext,它负责设置核心数据。此文件中的某些值是从CDRCoreDataComponents加载的,这样可以轻松设置例如生产与测试环境。
现在专门解决你的问题。 。 。
自己注入模型类:
通常持久域对象往往具有没有方法的属性,并且许多人认为不应该是这种情况(由configuration file调用)。他们认为,在正确的面向对象设计中,模型对象将具有行为和属性,并且行为的理想位置接近于它们所代表的数据。
问题在于:
“钩点”方法(受台风支持):
我们可以按如下方式指示台风Martin Fowler and others 'the anemic domain object anti-pattern:
Knight* knight = ... //Loaded from persistent storage
[componentFactory inject:knight]; //Matches by type
[componentFactory inject:knight withDefinition:@selector(selectorInAssembly)];
这是'钩点'方法。获得一个实例后,我们告诉Typhoon注入它。首先inject a pre-obtained instance进入我们的数据访问对象,网络客户端或任何将发出对象的内容。作为最后一步,我们告诉Typhoon根据装配中定义的配方注入我们的模型。瞧瞧!
自定义核心数据集成(Typhoon不支持):
也许我们可以提供与Core Data更紧密的集成(正如我们对UIStoryBoard所做的那样),而不是使用这种“钩点”方法,所以上述步骤不是必需的? Typhoon目前不支持此功能。
使用AOP注入域对象:( Typhoon不支持)
事实上,除了Core Data的特定解决方案之外,还有另一种使用“AOP”注入任何域对象的方法。我们的意思是截取并检测所有域对象的init方法,以便随后根据程序集中的规则加载依赖项。这就是we inject the TyphoonComponentFactory
itself(一种流行的DI + AOP框架)中@Configurable
注释的工作原理。问题是找到一种合适的方法将模型对象与TyphoonComponentFactory
相关联,而不会过于侵入(即单身)。说“这个产品,汽车和假日的每个实例都与这个组件相关”有一些缺点,这就是为什么我们赞成到目前为止的“钩点”方法。
您的反馈:
如果你对钩点方法感到满意,那就太好了。如果您对特定核心数据集成或上述“AOP”解决方案感兴趣,那么我们很乐意与您一起探索。已经进行了一些讨论。