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