On Sunday, 13 May 2018 at 07:42:10 UTC, Suliman wrote:
Could anybody give small example of Dependency injection
pattern? I googled about it, but found only C# examples and I
am not quite sure how to use them.
Also I would like get some explanation/comments for code.
Here is a quick example of the difference, myProgram.execute
utilizes a database connection.
dInjection.execute utilizes a dependency injected database
connection.
--------------------
class dbConnection {}
class myProgram {
void execute() {
auto db = new dbConnection();
//...
}
}
class dInjection {
void execute(dbConnection db) {
//...
}
}
--------------------
What you should notice from the first execute function is that
the dependency, in this case dbConnection, is created as part of
the application execution. While the second the dependency is
declared at the function's arguments allowing the caller to
inject the needed dependency.
This could go a step further and accept an interface for DB
connections, but is not necessary to meat dependency injection.
Dependency injection also applies to magic numbers.
enum maxProcessingTime = 3582;
If this were declared inside a function rather than taken as a
parameter, then the function would not correctly use dependency
injection.
Additionally, you could inject the dbConnection as part of the
class constructor:
----------------------
class preInjection {
dbConnection db;
this(dbConnection data) { db = data}
void execute() {
//...
}
}
----------------------
Now I think what trips a lot of people up is that frameworks are
created to help you do this. They try to make it easy to define
all your dependencies in a single location and then you request
the object you need and the DI framework will do whatever it
needs to for building that object.