Issue 1:
I'm submitting a ...

[x] bug report => search github for a similar issue or PR before submitting
[ ] feature request
[ ] support request

Current behavior

Service's method can't access the service attribute when called from a child component of ChildModule with this if the service is declared in the providers array of AppModule and ChildModule.

Expected behavior

An error need to spawn to warning the duplicated declaration of the service. Because without this error I searched for 3 days where was the problem in my service /or/ my component trying everything but nothing was working, then I just removed the service from my ChildModule and it was working fine.

Minimal reproduction of the problem with instructions

I tried to make a Plunker, but I can't manage to setup the router on it, so it's not representative because it seems we need to load the sub-module with the router loadChildren method.

You can see the code issuing this problem on my Github here (protected branch): https://github.com/SherlockStd/ME4N-Starter/tree/this-error/src/app

Here is the main structure of the files:

src/
├── app.component.html
├── app.component.ts
├── app.module.ts <== provide AuthenticationService
├── app.routes.ts <== load authentication.module with router.loadChildren()
│
├── +authentication/
│ ├── authentication.component.html
│ ├── authentication.component.ts
│ ├── authentication.module.ts <== provide AuthenticationService
│ ├── authentication.routes.ts <== expose a route to login component
│ └── login
│ ├── login.component.html
│ └── login.component.ts <== using service's methods here don't work
│
└── shared/
└── services/
├── authentication.service.ts
└── base.service.ts

What I mean by login.component.ts <== using service's methods here don't work is that the service is unable to set his own attributes, it can read them but can't write.

If we provide AuthenticationService only in app.module.ts, instead of both app.module.ts and authentication.module.ts (), the problem is solved.

What is the motivation / use case for changing the behavior?

If something like this break the context, we need to display an error explaining why.

Please tell us about your environment:

Ubuntu 16.10, VSCode, yarn 0.23.4

Angular version: 4.1.1

Browser: [all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari | iOS XX UIWebView | iOS XX WKWebView ]

Language: TypeScript 2.3.2 compiling to ES5 (with AoT for prod)

Node (for AoT issues): 7.10.0

Issue 2:
We would like to implement bare bones change detection so that we can unblock ourselves for other parts of the system and work on them in parallel.

https://github.com/mhevery/angular/blob/master/modules/change_detection/src/watch_group.js

https://github.com/mhevery/angular/blob/master/modules/change_detection/src/record.js

I would love to get a very simple change detection going which can only watch simple properties such as foo or bar ie no (foo.bar or foo().bar or anything of that sort)

We should be able to implement this without the need for parser.

class Person {
var age;
}

var person = new Person();
var pwg = new ProtoWatchGroup();
pwg.watch('age');
var wg = pwg.instantiate();
wg.setContext(person);
var cd = new ChangeDetection(wg);
cd.detectChanges();

Make this test pass:

angular/modules/change_detection/test/change_detection_spec.js

Line 9
in
69210e4

it('should do simple watching', function() {