Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8613283
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 12, 20262026-06-12T04:50:20+00:00 2026-06-12T04:50:20+00:00

What is the best practice for injecting dependencies into models? And especially, what if

  • 0

What is the best practice for injecting dependencies into models? And especially, what if their getter are asynchronous, as with mongodb.getCollection()?

The point is to inject dependencies once with

var model = require('./model')({dep1: foo, dep2: bar});

and call all member methods without having to pass them as arguments. Neither do I want to have each method to begin with a waterfall of async getters.

I ended up with a dedicated exports wrapper that proxies all calls and passes the async dependencies.

However, this creates a lot of overhead, it’s repetitive a lot and I generally do not like it.

var Entity = require('./entity');

function findById(id, callback, collection) {
    // ...
    // callback(null, Entity(...));
};

module.exports = function(di) {
    function getCollection(callback) {
        di.database.collection('users', callback);
    };

    return {
        findById: function(id, callback) {
            getCollection(function(err, collection) {
                findById(id, callback, collection);
            });
        },
        // ... more methods, all expecting `collection`
    };
};

What is the best practice for injecting dependencies, especially those with async getters?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-12T04:50:21+00:00Added an answer on June 12, 2026 at 4:50 am

    If your need is to support unit testing, dependency injection in a dynamic language like javascript is probably more trouble than it’s worth. Note that just about none of the modules you require from others are likely to use the patterns for DI you see in Java, .NET, and with other statically compiled languages.

    If you want to mock out behavior in order to isolate specific units of code for testing, see the ‘sinon’ module http://sinonjs.org/. It allows you to dynamically swap in/out interceptors that can either spy on method calls or replace them altogether. In practice, you would write a mocha test where you require your module, then require a module that’s leveraged in your code. Use sinon to spy or stub a method on that module and as a result, you can isolate your code.

    There is one scenario where I’ve not been able to completely isolate 3rd party code with sinon, and this is when the act of require()ing a module executes some behavior that you don’t want to run in your test. For that scenario, I made a super simple module called ‘mockrequire’ https://github.com/mateodelnorte/mockrequire that allows you to provide an inline mock to be required instead of the actual module. You can provide a mock that uses spy or stub from sinon and have the same syntax and patterns as all the rest of your tests.

    Hopefully this answers the underlying question from your post. 😉

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Is this the best practice for injecting a class dependency into a repository? Bear
Short best practice question: If an object A is injected into another object B,
What is the best practice for inserting a newline character into a string in
How do I inject dependencies into the global.asax.cs, i.e. the MvcApplication class? Having previously
Best practice is to use unique ivs, but what is unique? Is it unique
The 'best practice' (as I see it) to atomically create a new file, is
The best practice seems to be to use assert for a condition that should
What would be the best practice to keep the user logged in if he
Is there a best practice for making an entity immutable? Users create exercises in
What is the best practice for generating valid XML with PHP from user submitted

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.