I am creating an angular provider (because it needs to be configurable) and I need it to initialize once when the app starts so I have an init() function inside the $get function of my provider which is not returned as part of the public. The init() function also attaches a resize event to the window. Here is a very simplified version...
angular.module('my.services').provider('breakpoints', function(){
    var breakpoints = [];
    var currentBreakpoint = {};
    init();
    return({
        $get: instantiate
    });
    function instantiate($rootScope, $window) {
        _initService();
        // Public API
        return({
            current: current,
        });
        function current() {
            return currentBreakpoint;
        }
        function _windowWidthChanged(){
            // Check if breakpoint has changed and broadcast event if it has
        }
        function _initService(){
            angular.element($window).bind('resize', _windowWidthChanged);
            _windowWidthChanged();
        }
    }
});
My question is, when does this initService() function run?
I know it isn't run if I don't inject it into any controllers/directives etc, even though it is part of a module that is injected into my app. I know this because I put a console.log() into the function.
If I inject the service into a directive that needs it I know the function runs when the page loads, which is what I want, but will it run every time it is injected into a different directive? If so then I would get multiple events attached to the window and it would $broadcast multiple events when the breakpoint changes, which in turn would trigger all my directives to re-layout, which would be a nightmare.
Basically I want the service to initialize once when it is first used. Attach a single resize event to the window and broadcast a single event if the breakpoint changes.
 
    