mirror of
https://github.com/mbierlee/poodinis.git
synced 2024-11-15 04:04:01 +01:00
Add registration of basic dependencies through application context
This commit is contained in:
parent
be5eb37617
commit
55d3139f5b
|
@ -23,6 +23,7 @@ debug {
|
||||||
|
|
||||||
import poodinis.registration;
|
import poodinis.registration;
|
||||||
import poodinis.autowire;
|
import poodinis.autowire;
|
||||||
|
import poodinis.context;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exception thrown when errors occur while resolving a type in a dependency container.
|
* Exception thrown when errors occur while resolving a type in a dependency container.
|
||||||
|
@ -361,6 +362,18 @@ synchronized class DependencyContainer {
|
||||||
registrations.remove(typeid(RegistrationType));
|
registrations.remove(typeid(RegistrationType));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register dependencies through an application context.
|
||||||
|
*
|
||||||
|
* An application context allows you to fine-tune dependency set-up and instantiation.
|
||||||
|
* It is mostly used for dependencies which come from an external library or when you don't
|
||||||
|
* want to use annotations to set-up dependencies in your classes.
|
||||||
|
*/
|
||||||
|
public void registerContext(Context : ApplicationContext)() {
|
||||||
|
auto context = new Context();
|
||||||
|
context.registerDependencies(this);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a global singleton instance of a dependency container.
|
* Returns a global singleton instance of a dependency container.
|
||||||
*/
|
*/
|
||||||
|
|
20
source/poodinis/context.d
Normal file
20
source/poodinis/context.d
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
/**
|
||||||
|
* Contains the implementation of application context setup.
|
||||||
|
*
|
||||||
|
* Part of the Poodinis Dependency Injection framework.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Mike Bierlee, m.bierlee@lostmoment.com
|
||||||
|
* Copyright: 2014-2015 Mike Bierlee
|
||||||
|
* License:
|
||||||
|
* This software is licensed under the terms of the MIT license.
|
||||||
|
* The full terms of the license can be found in the LICENSE file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module poodinis.context;
|
||||||
|
|
||||||
|
import poodinis.container;
|
||||||
|
|
||||||
|
class ApplicationContext {
|
||||||
|
public void registerDependencies(shared(DependencyContainer) container) {}
|
||||||
|
}
|
|
@ -14,3 +14,4 @@ module poodinis;
|
||||||
public import poodinis.autowire;
|
public import poodinis.autowire;
|
||||||
public import poodinis.container;
|
public import poodinis.container;
|
||||||
public import poodinis.registration;
|
public import poodinis.registration;
|
||||||
|
public import poodinis.context;
|
||||||
|
|
|
@ -11,6 +11,12 @@ import std.exception;
|
||||||
import core.thread;
|
import core.thread;
|
||||||
|
|
||||||
version(unittest) {
|
version(unittest) {
|
||||||
|
class TestContext : ApplicationContext {
|
||||||
|
public override void registerDependencies(shared(DependencyContainer) container) {
|
||||||
|
container.register!TestClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
interface TestInterface {
|
interface TestInterface {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -485,4 +491,13 @@ version(unittest) {
|
||||||
|
|
||||||
assert(instance.unrelated !is null);
|
assert(instance.unrelated !is null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test setting up simple dependencies through application context
|
||||||
|
unittest {
|
||||||
|
shared(DependencyContainer) container = new DependencyContainer();
|
||||||
|
container.registerContext!TestContext;
|
||||||
|
auto instance = container.resolve!TestClass;
|
||||||
|
|
||||||
|
assert(instance !is null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
12
test/poodinis/contexttest.d
Normal file
12
test/poodinis/contexttest.d
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
/**
|
||||||
|
* Poodinis Dependency Injection Framework
|
||||||
|
* Copyright 2014-2015 Mike Bierlee
|
||||||
|
* This software is licensed under the terms of the MIT license.
|
||||||
|
* The full terms of the license can be found in the LICENSE file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import poodinis.context;
|
||||||
|
|
||||||
|
version(unittest) {
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue