我想解決如何注入資源到NSManagedObject子類實例,但找不到合理的方法。注入資源到NSManagedObject子類實例
簡而言之,我有一個對象,它表示一個實體的行爲方法需要的服務。此服務需要在運行時可用。
在Plain-Old-Objective-C-Object中,我只是簡單地將這個對象作爲構造函數參數傳遞,或者在構造後通過屬性設置它。與多少個對象需要和使用一個委託類似。
但是,awakeFromInsert和awakeFromFetch顯然不帶任何參數,我也找不到任何地方掛鉤到NSManagedObjectContext來配置NSManagedObjects後期初始化。
有沒有人有解決方案?
作爲一個完全人爲的例子:
@interface ProductEntity : NSManagedObject
@property (nonatomic, retain) NSNumber *unitPrice;
@property (nonatomic, retain) MyTaxCalculatorService *taxCalculatorService;
- (void)grossPriceForUnits:(NSUInteger)units;
@end
@implementation ProductEntity
@dynamic unitPrice;
@synthesize taxCalculatorService
- (void)grossPriceForUnits:(NSUInteger)units
{
return [self.taxCalculatorService grossAmountForUnitPrice:self.unitPrice quantity:units];
}
@end
無視這是否是計算總價格(這是一個人爲的例子)的最佳方式,我怎麼會得到taxCalculatorService到例如ProductEntity?我無法覆蓋init,並且我無法找到任何可以一致調用的實體[entity setTaxCalculatorService:service]。
想法?
你說的是「服務」類的單個共享實例還是每個對象都有自己的實例? – jrturton
每個實體都有一個對服務實例的引用。有些可能會分享,有些可能不會。在我設計的例子中,你可以想象有些產品的稅收計算策略與其他產品不同。 –