Skip to content

Instantly share code, notes, and snippets.

@ferclaverino
Created August 11, 2012 03:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ferclaverino/3320664 to your computer and use it in GitHub Desktop.
Save ferclaverino/3320664 to your computer and use it in GitHub Desktop.
tiny IoC for W8 metro
(function () {
"use strict";
var registry = [];
function wire(key, constructor) {
var object = constructor(this);
registry.push({ key: key, object: object });
}
function get(key) {
var searchResult = registry.filter(function (item) {
if (item.key == key) {
return true;
}
});
var object = searchResult[0].object;
return object;
}
// add to namespace
WinJS.Namespace.define("Container", {
wire: wire,
get: get
});
})();
(function () {
"use strict";
// mappers
var feedSectionMapper = new Mappers.FeedSectionMapper();
var moreSectionsMapper = new Mappers.MoreSectionsMapper();
var appSectionMapper = new Mappers.AppSectionMapper(feedSectionMapper);
var feedNewsMapper = new Mappers.FeedNewsMapper(feedSectionMapper);
var feedVideosMapper = new Mappers.FeedVideosMapper(feedSectionMapper);
Container.wire("mapper.feedSection", function () { return feedSectionMapper });
// queries
var allSectionsQuery = new Queries.AllSectionsQuery(feedSectionMapper, appSectionMapper);
var queryHomeNoCache = new Queries.HomeNewsQuery(feedNewsMapper, moreSectionsMapper, allSectionsQuery);
Container.wire("query.allSections", function () { return new Queries.AllSectionsCachedQuery(allSectionsQuery) });
Container.wire("query.homeNews", function () { return new Queries.HomeNewsCachedQuery(queryHomeNoCache, 1) });
Container.wire("query.newsBySection", function () { return new Queries.NewsBySectionQuery(feedNewsMapper) });
Container.wire("query.newsDetail", function () { return new Queries.NewsDetailQuery() });
Container.wire("query.newsForNavigation", function (c) { return new Queries.NewsForNavigationQuery(c.get("query.newsBySection")) });
Container.wire("query.search", function () { return new Queries.SearchQuery(queryHomeNoCache) });
Container.wire("query.search.sugestion", function (c) { return new Queries.SearchSugestionQuery(c.get("query.homeNews")) });
Container.wire("query.videos", function () { return new Queries.VideosQuery(feedVideosMapper) });
})();
(function () {
"use strict";
searchData: function (queryText) {
var searchQuery = Container.get("query.search");
return searchQuery.getNews(queryText).then(function (news) {
...
})
},
...
})
})();
test("give me my dog", function () {
Container.wire("myDog", function () { return new Acme.Dog() });
var myDog = Container.get("myDog");
equal(myDog.name, "mostro", "Expected: mostro");
});
test("give me my turtle", function () {
Container.wire("myTurtle", function () { return new Acme.Turtle() });
var myTurtle = Container.get("myTurtle");
equal(myTurtle.name, "flash", "Expected: flash");
});
test("give me my dog and my turtle", function () {
var myDog = Container.get("myDog");
equal(myDog.name, "mostro", "Expected: mostro");
var myTurtle = Container.get("myTurtle");
equal(myTurtle.name, "flash", "Expected: flash");
});
test("give me my pet", function () {
Container.wire("myPet", function () { return new Acme.Pet("tom") });
var myPet = Container.get("myPet");
equal(myPet.name, "tom", "Expected: tom");
});
test("give me owner", function () {
Container.wire("myOwner", function (c) { return new Acme.Owner(c.get("myPet")) });
var myOwner = Container.get("myOwner");
equal(myOwner.pet.name, "tom", "Expected: tom");
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment