mirror of
https://github.com/mbierlee/poodinis.git
synced 2024-11-15 04:04:01 +01:00
Add debug specifier to reduce verbosity of debug output
This commit is contained in:
parent
77cc636e7f
commit
7a628c32c4
11
dub.json
11
dub.json
|
@ -19,6 +19,17 @@
|
||||||
"dflags-dmd": [
|
"dflags-dmd": [
|
||||||
"-main"
|
"-main"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "unittestVerbose",
|
||||||
|
"targetType": "executable",
|
||||||
|
"debugVersions": ["poodinisVerbose"],
|
||||||
|
"sourcePaths": [
|
||||||
|
"test"
|
||||||
|
],
|
||||||
|
"dflags-dmd": [
|
||||||
|
"-main"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -27,7 +27,7 @@ alias Autowired = Autowire;
|
||||||
public void autowire(Type)(DependencyContainer container, Type instance) {
|
public void autowire(Type)(DependencyContainer container, Type instance) {
|
||||||
// For the love of god, refactor this!
|
// For the love of god, refactor this!
|
||||||
|
|
||||||
debug {
|
debug(poodinisVerbose) {
|
||||||
auto instanceType = typeid(Type);
|
auto instanceType = typeid(Type);
|
||||||
auto instanceAddress = &instance;
|
auto instanceAddress = &instance;
|
||||||
writeln(format("DEBUG: Autowiring members of [%s@%s]", instanceType, instanceAddress));
|
writeln(format("DEBUG: Autowiring members of [%s@%s]", instanceType, instanceAddress));
|
||||||
|
@ -40,7 +40,8 @@ public void autowire(Type)(DependencyContainer container, Type instance) {
|
||||||
if (__traits(getMember, instance, member) is null) {
|
if (__traits(getMember, instance, member) is null) {
|
||||||
alias memberReference = TypeTuple!(__traits(getMember, instance, member));
|
alias memberReference = TypeTuple!(__traits(getMember, instance, member));
|
||||||
alias MemberType = typeof(memberReference)[0];
|
alias MemberType = typeof(memberReference)[0];
|
||||||
debug {
|
|
||||||
|
debug(poodinisVerbose) {
|
||||||
string qualifiedInstanceTypeString = typeid(MemberType).toString;
|
string qualifiedInstanceTypeString = typeid(MemberType).toString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +49,7 @@ public void autowire(Type)(DependencyContainer container, Type instance) {
|
||||||
static if (is(autowireAttribute == Autowire!T, T) && !is(autowireAttribute.qualifier == UseMemberType)) {
|
static if (is(autowireAttribute == Autowire!T, T) && !is(autowireAttribute.qualifier == UseMemberType)) {
|
||||||
alias QualifierType = typeof(autowireAttribute.qualifier);
|
alias QualifierType = typeof(autowireAttribute.qualifier);
|
||||||
qualifiedInstance = container.resolve!(typeof(memberReference), QualifierType);
|
qualifiedInstance = container.resolve!(typeof(memberReference), QualifierType);
|
||||||
debug {
|
debug(poodinisVerbose) {
|
||||||
qualifiedInstanceTypeString = typeid(QualifierType).toString;
|
qualifiedInstanceTypeString = typeid(QualifierType).toString;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -57,7 +58,7 @@ public void autowire(Type)(DependencyContainer container, Type instance) {
|
||||||
|
|
||||||
__traits(getMember, instance, member) = qualifiedInstance;
|
__traits(getMember, instance, member) = qualifiedInstance;
|
||||||
|
|
||||||
debug {
|
debug(poodinisVerbose) {
|
||||||
auto qualifiedInstanceAddress = &qualifiedInstance;
|
auto qualifiedInstanceAddress = &qualifiedInstance;
|
||||||
writeln(format("DEBUG: Autowired instance [%s@%s] to [%s@%s].%s", qualifiedInstanceTypeString, qualifiedInstanceAddress, instanceType, instanceAddress, member));
|
writeln(format("DEBUG: Autowired instance [%s@%s] to [%s@%s].%s", qualifiedInstanceTypeString, qualifiedInstanceAddress, instanceType, instanceAddress, member));
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ class DependencyContainer {
|
||||||
TypeInfo registeredType = typeid(InterfaceType);
|
TypeInfo registeredType = typeid(InterfaceType);
|
||||||
TypeInfo_Class concreteType = typeid(ConcreteType);
|
TypeInfo_Class concreteType = typeid(ConcreteType);
|
||||||
|
|
||||||
debug {
|
debug(poodinisVerbose) {
|
||||||
writeln(format("DEBUG: Register type %s (as %s)", concreteType.toString(), registeredType.toString()));
|
writeln(format("DEBUG: Register type %s (as %s)", concreteType.toString(), registeredType.toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ class DependencyContainer {
|
||||||
TypeInfo resolveType = typeid(RegistrationType);
|
TypeInfo resolveType = typeid(RegistrationType);
|
||||||
TypeInfo qualifierType = typeid(QualifierType);
|
TypeInfo qualifierType = typeid(QualifierType);
|
||||||
|
|
||||||
debug {
|
debug(poodinisVerbose) {
|
||||||
writeln("DEBUG: Resolving type " ~ resolveType.toString() ~ " with qualifier " ~ qualifierType.toString());
|
writeln("DEBUG: Resolving type " ~ resolveType.toString() ~ " with qualifier " ~ qualifierType.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,132 +1,132 @@
|
||||||
/**
|
/**
|
||||||
* Poodinis Dependency Injection Framework
|
* Poodinis Dependency Injection Framework
|
||||||
* Copyright 2014 Mike Bierlee
|
* Copyright 2014 Mike Bierlee
|
||||||
* This software is licensed under the terms of the MIT 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.
|
* The full terms of the license can be found in the LICENSE file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
module poodinis.registration;
|
module poodinis.registration;
|
||||||
|
|
||||||
debug {
|
debug {
|
||||||
import std.stdio;
|
import std.stdio;
|
||||||
import std.string;
|
import std.string;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Registration {
|
class Registration {
|
||||||
TypeInfo registeredType = null;
|
TypeInfo registeredType = null;
|
||||||
TypeInfo_Class instantiatableType = null;
|
TypeInfo_Class instantiatableType = null;
|
||||||
CreationScope registationScope = null;
|
CreationScope registationScope = null;
|
||||||
|
|
||||||
this(TypeInfo registeredType, TypeInfo_Class instantiatableType) {
|
this(TypeInfo registeredType, TypeInfo_Class instantiatableType) {
|
||||||
this.registeredType = registeredType;
|
this.registeredType = registeredType;
|
||||||
this.instantiatableType = instantiatableType;
|
this.instantiatableType = instantiatableType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getInstance() {
|
public Object getInstance() {
|
||||||
if (registationScope is null) {
|
if (registationScope is null) {
|
||||||
throw new NoScopeDefinedException(registeredType);
|
throw new NoScopeDefinedException(registeredType);
|
||||||
}
|
}
|
||||||
|
|
||||||
return registationScope.getInstance();
|
return registationScope.getInstance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class NoScopeDefinedException : Exception {
|
class NoScopeDefinedException : Exception {
|
||||||
this(TypeInfo type) {
|
this(TypeInfo type) {
|
||||||
super("No scope defined for registration of type " ~ type.toString());
|
super("No scope defined for registration of type " ~ type.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface CreationScope {
|
interface CreationScope {
|
||||||
public Object getInstance();
|
public Object getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
class NullScope : CreationScope {
|
class NullScope : CreationScope {
|
||||||
public Object getInstance() {
|
public Object getInstance() {
|
||||||
debug {
|
debug(poodinisVerbose) {
|
||||||
writeln("DEBUG: No instance created (NullScope)");
|
writeln("DEBUG: No instance created (NullScope)");
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SingleInstanceScope : CreationScope {
|
class SingleInstanceScope : CreationScope {
|
||||||
TypeInfo_Class instantiatableType = null;
|
TypeInfo_Class instantiatableType = null;
|
||||||
Object instance = null;
|
Object instance = null;
|
||||||
|
|
||||||
this(TypeInfo_Class instantiatableType) {
|
this(TypeInfo_Class instantiatableType) {
|
||||||
this.instantiatableType = instantiatableType;
|
this.instantiatableType = instantiatableType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getInstance() {
|
public Object getInstance() {
|
||||||
if (instance is null) {
|
if (instance is null) {
|
||||||
debug {
|
debug(poodinisVerbose) {
|
||||||
writeln(format("DEBUG: Creating new instance of type %s (SingleInstanceScope)", instantiatableType.toString()));
|
writeln(format("DEBUG: Creating new instance of type %s (SingleInstanceScope)", instantiatableType.toString()));
|
||||||
}
|
}
|
||||||
instance = instantiatableType.create();
|
instance = instantiatableType.create();
|
||||||
} else {
|
} else {
|
||||||
debug {
|
debug(poodinisVerbose) {
|
||||||
writeln(format("DEBUG: Existing instance returned of type %s (SingleInstanceScope)", instantiatableType.toString()));
|
writeln(format("DEBUG: Existing instance returned of type %s (SingleInstanceScope)", instantiatableType.toString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Registration singleInstance(Registration registration) {
|
public Registration singleInstance(Registration registration) {
|
||||||
registration.registationScope = new SingleInstanceScope(registration.instantiatableType);
|
registration.registationScope = new SingleInstanceScope(registration.instantiatableType);
|
||||||
return registration;
|
return registration;
|
||||||
}
|
}
|
||||||
|
|
||||||
class NewInstanceScope : CreationScope {
|
class NewInstanceScope : CreationScope {
|
||||||
TypeInfo_Class instantiatableType = null;
|
TypeInfo_Class instantiatableType = null;
|
||||||
|
|
||||||
this(TypeInfo_Class instantiatableType) {
|
this(TypeInfo_Class instantiatableType) {
|
||||||
this.instantiatableType = instantiatableType;
|
this.instantiatableType = instantiatableType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getInstance() {
|
public Object getInstance() {
|
||||||
debug {
|
debug(poodinisVerbose) {
|
||||||
writeln(format("DEBUG: Creating new instance of type %s (SingleInstanceScope)", instantiatableType.toString()));
|
writeln(format("DEBUG: Creating new instance of type %s (SingleInstanceScope)", instantiatableType.toString()));
|
||||||
}
|
}
|
||||||
return instantiatableType.create();
|
return instantiatableType.create();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Registration newInstance(Registration registration) {
|
public Registration newInstance(Registration registration) {
|
||||||
registration.registationScope = new NewInstanceScope(registration.instantiatableType);
|
registration.registationScope = new NewInstanceScope(registration.instantiatableType);
|
||||||
return registration;
|
return registration;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ExistingInstanceScope : CreationScope {
|
class ExistingInstanceScope : CreationScope {
|
||||||
Object instance = null;
|
Object instance = null;
|
||||||
|
|
||||||
this(Object instance) {
|
this(Object instance) {
|
||||||
this.instance = instance;
|
this.instance = instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getInstance() {
|
public Object getInstance() {
|
||||||
debug {
|
debug(poodinisVerbose) {
|
||||||
writeln("DEBUG: Existing instance returned (ExistingInstanceScope)");
|
writeln("DEBUG: Existing instance returned (ExistingInstanceScope)");
|
||||||
}
|
}
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Registration existingInstance(Registration registration, Object instance) {
|
public Registration existingInstance(Registration registration, Object instance) {
|
||||||
registration.registationScope = new ExistingInstanceScope(instance);
|
registration.registationScope = new ExistingInstanceScope(instance);
|
||||||
return registration;
|
return registration;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string toConcreteTypeListString(Registration[] registrations) {
|
public string toConcreteTypeListString(Registration[] registrations) {
|
||||||
auto concreteTypeListString = "";
|
auto concreteTypeListString = "";
|
||||||
foreach (registration ; registrations) {
|
foreach (registration ; registrations) {
|
||||||
if (concreteTypeListString.length > 0) {
|
if (concreteTypeListString.length > 0) {
|
||||||
concreteTypeListString ~= ", ";
|
concreteTypeListString ~= ", ";
|
||||||
}
|
}
|
||||||
concreteTypeListString ~= registration.instantiatableType.toString();
|
concreteTypeListString ~= registration.instantiatableType.toString();
|
||||||
}
|
}
|
||||||
return concreteTypeListString;
|
return concreteTypeListString;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue