Add debug specifier to reduce verbosity of debug output

This commit is contained in:
Mike Bierlee 2014-12-23 23:03:59 +01:00
parent 77cc636e7f
commit 7a628c32c4
4 changed files with 150 additions and 138 deletions

View file

@ -19,6 +19,17 @@
"dflags-dmd": [ "dflags-dmd": [
"-main" "-main"
] ]
},
{
"name": "unittestVerbose",
"targetType": "executable",
"debugVersions": ["poodinisVerbose"],
"sourcePaths": [
"test"
],
"dflags-dmd": [
"-main"
]
} }
] ]
} }

View file

@ -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));
} }

View file

@ -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());
} }

View file

@ -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;
} }