Skip to content

Exception with reason: 'Key is already registered.' #554

@pinchukvd

Description

@pinchukvd

I have two properties in AppAssembly - SearchModuleAssembly and FavoritesModuleAssembly. AppAssembly, SearchModuleAssembly, FavoritesModuleAssembly are initial assemblies.
It's throwing an exception on run "reason: 'Key 'router' is already registered.'".

@interface AppAssembly : TyphoonAssembly
@property (strong, nonatomic) SearchModuleAssembly *searchModuleAssembly;
@property (strong, nonatomic) FavoritesModuleAssembly *favoritesModuleAssembly;
@implementation SearchModuleAssembly
-(UIViewController *)view
{
    return [TyphoonDefinition withClass:[SearchVC class] configuration:^(TyphoonDefinition *definition) {
        [definition useInitializer:@selector(initWithClassNib)];
        [definition injectProperty:@selector(viewModel) with:[self viewModel]];
    }];
}

-(id<ViewModelProtocol>)viewModel
{
    return [TyphoonDefinition withClass:[SearchViewModel class] configuration:^(TyphoonDefinition *definition) {
        [definition injectProperty:@selector(router) with:[self router]];
    }];
}

-(id<RouterProtocol>)router
{
    return [TyphoonDefinition withClass:[SearchRouter class] configuration:^(TyphoonDefinition *definition) {
        [definition injectProperty:@selector(viewController) with:[self view]];
    }];
}
@implementation FavoritesModuleAssembly
-(UIViewController *)view
{
    return [TyphoonDefinition withClass:[FavoritesVC class] configuration:^(TyphoonDefinition *definition) {
        [definition useInitializer:@selector(initWithClassNib)];
        [definition injectProperty:@selector(viewModel) with:[self viewModel]];
    }];
}

-(id<ViewModelProtocol>)viewModel
{
    return [TyphoonDefinition withClass:[FavoritesViewModel class] configuration:^(TyphoonDefinition *definition) {
        [definition injectProperty:@selector(router) with:[self router]];
    }];
}

-(id<RouterProtocol>)router
{
    return [TyphoonDefinition withClass:[FavoritesRouter class] configuration:^(TyphoonDefinition *definition) {
        [definition injectProperty:@selector(viewController) with:[self view]];
    }];
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions