Dave,
i'm not sure that i understand why you want to provide a generic method
like you did for accessing managers or other things that Weblogger can't
possibly know about or make use of.
i think a better way to do what you want is to use subclassing and
casting. so instead of what you are suggesting ...
WebloggerFactory.getInstance(MyCustomManager.class);
... you would do this ...
MyWeblogger myWeblogger = (MyWeblogger) WebloggerFactory.getWeblogger();
MyCustomManager myManager = myWeblogger.getMyManager();
... which follows our current design patterns a bit more and is more in
line with our process of bootstrapping the app once and not using the
Injector again after that.
-- Allen
[EMAIL PROTECTED] wrote:
Author: snoopdave
Date: Tue Jul 31 06:42:33 2007
New Revision: 561329
URL: http://svn.apache.org/viewvc?view=rev&rev=561329
Log:
Restoring ability to get instance from injector, need this to add custom
managers and other extensions to backend.
Modified:
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/GuiceWebloggerProvider.java
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/WebloggerFactory.java
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/WebloggerProvider.java
Modified:
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/GuiceWebloggerProvider.java
URL:
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/GuiceWebloggerProvider.java?view=diff&rev=561329&r1=561328&r2=561329
==============================================================================
---
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/GuiceWebloggerProvider.java
(original)
+++
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/GuiceWebloggerProvider.java
Tue Jul 31 06:42:33 2007
@@ -30,10 +30,10 @@
public class GuiceWebloggerProvider implements WebloggerProvider {
// Guice injector
- private final Injector injector;
+ protected final Injector injector;
// maintain our own singleton instance of Weblogger
- private Weblogger webloggerInstance = null;
+ protected Weblogger webloggerInstance = null;
/**
@@ -95,4 +95,10 @@
return webloggerInstance;
}
+ /**
+ * Get injected instance, for custom managers.
+ */
+ public <T> T getInstance(Class<T> type) {
+ return injector.getInstance(type);
+ }
}
Modified:
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/WebloggerFactory.java
URL:
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/WebloggerFactory.java?view=diff&rev=561329&r1=561328&r2=561329
==============================================================================
---
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/WebloggerFactory.java
(original)
+++
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/WebloggerFactory.java
Tue Jul 31 06:42:33 2007
@@ -65,6 +65,18 @@
/**
+ * Get injected instance, for custom managers.
+ */
+ public <T> T getInstance(Class<T> type) {
+ if (webloggerProvider == null) {
+ throw new IllegalStateException("Roller Weblogger has not been
bootstrapped yet");
+ }
+
+ return webloggerProvider.getInstance(type);
+ }
+
+
+ /**
* Bootstrap the Roller Weblogger business tier, uses default
WebloggerProvider.
*
* Bootstrapping the application effectively instantiates all the necessary
Modified:
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/WebloggerProvider.java
URL:
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/WebloggerProvider.java?view=diff&rev=561329&r1=561328&r2=561329
==============================================================================
---
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/WebloggerProvider.java
(original)
+++
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/WebloggerProvider.java
Tue Jul 31 06:42:33 2007
@@ -35,4 +35,9 @@
*/
public Weblogger getWeblogger();
+
+ /**
+ * Get injected instance, for custom managers.
+ */
+ public <T> T getInstance(Class<T> type);
}