1

アセンブリで基本構成を定義し、それをサブクラス化して追加の構成を持つことは可能ですか?

私はこのようなことを試みています:

@interface RootAssembly : TyphoonAssembly
- (id)abstractObject;
- (id)object;
@end


@implementation RootAssembly
- (id)abstractObject {
    return [TyphoonDefinition withClass:[NSObject class]];
}

- (id)object {
    return [TyphoonDefinition withParent:[self abstractObject] class:[NSObject class]];
}

@end


@interface ChildAssembly : RootAssembly @end

@implementation ChildAssembly
- (id)object {
    return [TyphoonDefinition withParent:[super abstractObject] class:[NSObject class]];
}
@end

アセンブリが 1 つしか使用されていない場合、すべてが正常に機能します。2 つ目のメソッドもインスタンス化されてアクティブ化されている場合、 を返すメソッドobjectはまだスウィズルされておらず、定義を構築しようとするため、例外が発生します。

2015-05-27 18:44:37.542 Typho[17693:8488013] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Only TyphoonDefinition object can be set as parent. But in method '(null)' object of class NSObject set as parent'

詳細はこちら: https://gist.github.com/oettam/01ac812c040ed28d913c

これは実際に行く方法ですか?

4

1 に答える 1

0

アセンブリの任意のサブクラスを定義して、同じメッセージに応答する限り、元のクラスまたは別のクラスとして機能させることができます。同様に、共同作業するアセンブリがプロトコルによってサポートされている場合、起動時にそれがどのように実現されているかを Typhoon に伝えることができます。

検討:

@interface ApplicationAssembly : TyphoonAssembly

//A collaborating assembly
@property(nonatomic, strong, readonly) KernelProvider *kernelProvider;

@end

@implementation ApplicationAssembly 

- (SomeViewController*)viewController 
{
    return [TyphoonDefinition withClass:[SomeViewController class] 
      configuration:^(TyphoonDefinition *definition) {

      [definition injectProperty:@selector(something) with:_kernelProvider.service];
    ];
}

スタートアップとして、好きなことを実現することができますKernelProvider

ApplicationAssembly *assembly = [[ApplicationAssembly new] 
    activateWithCollaboratingAssemblies:@[TestKernelProvider new]];

出力に Typhoon ログが表示されます。

TestKernelProvider will act in place of [KernelProvider class];

同じことが Typhoon のブートストラップのplist 統合スタイルにも当てはまります。plist 内の各アセンブリの具体的な実現を宣言するだけです。

これはあなたがやりたいことですか?上記の例で何が起こっているのかわかりませんが、Typhoon をどのようにブートストラップしているかを教えていただければ、それを調べることができます。

于 2015-05-28T06:57:46.793 に答える