2
0
Fork 0
mirror of https://github.com/ethauvin/rife2.git synced 2025-05-01 02:58:12 -07:00

Updated dependency injection examples

This commit is contained in:
Geert Bevin 2023-02-11 12:39:39 -05:00
parent 4446d1e811
commit 04cde04733
8 changed files with 53 additions and 13 deletions

View file

@ -4,23 +4,32 @@
*/ */
package rife; package rife;
import rife.apis.MyService;
import rife.apis.ServiceProvider;
import rife.engine.*; import rife.engine.*;
import rife.services.HelloService;
public class HelloAll extends Site { public class HelloAll extends Site implements ServiceProvider {
Router authentication; Router authentication;
Router cmf; Router cmf;
HelloDependencyInjection dependencyInjection;
Router generation; Router generation;
Router continuations; Router continuations;
Router gqm; Router gqm;
Router group; Router group;
Router resources; Router resources;
public MyService getMyService() {
return dependencyInjection.getMyService();
}
public void setup() { public void setup() {
group(authentication = new HelloAuthentication()); group(authentication = new HelloAuthentication());
group("/content", cmf = new HelloContentManagement()); group("/content", cmf = new HelloContentManagement());
group(new HelloContinuations()); group(new HelloContinuations());
group(new HelloCounterContinuations()); group(new HelloCounterContinuations());
group(new HelloDatabase()); group(new HelloDatabase());
group(dependencyInjection = new HelloDependencyInjection(new HelloService()));
group(new HelloErrors()); group(new HelloErrors());
group(new HelloForm()); group(new HelloForm());
group("/generation", generation = new HelloFormGeneration()); group("/generation", generation = new HelloFormGeneration());

View file

@ -4,16 +4,17 @@
*/ */
package rife; package rife;
import rife.apis.MyService;
import rife.apis.ServiceProvider; import rife.apis.ServiceProvider;
import rife.engine.*; import rife.engine.*;
import rife.engine.annotations.ActiveSite; import rife.engine.annotations.ActiveSite;
import rife.services.HelloService; import rife.services.HelloService;
public class HelloDependencyInjection extends Site { public class HelloDependencyInjection extends Site implements ServiceProvider {
public static class ServiceUser implements Element { public static class ServiceUser implements Element {
final ServiceProvider service_; final MyService service_;
public ServiceUser(ServiceProvider service) { public ServiceUser(MyService service) {
service_ = service; service_ = service;
} }
@ -22,17 +23,21 @@ public class HelloDependencyInjection extends Site {
} }
} }
public MyService getMyService() {
return service_;
}
public static class ServiceUser2 implements Element { public static class ServiceUser2 implements Element {
@ActiveSite HelloDependencyInjection site_; @ActiveSite ServiceProvider provider_;
public void process(Context c) { public void process(Context c) {
c.print(site_.service_.serviceApi()); c.print(provider_.getMyService().serviceApi());
} }
} }
final ServiceProvider service_; final MyService service_;
public HelloDependencyInjection(ServiceProvider service) { public HelloDependencyInjection(MyService service) {
this.service_ = service; this.service_ = service;
} }

View file

@ -0,0 +1,5 @@
package rife.apis;
public interface MyService {
String serviceApi();
}

View file

@ -1,5 +1,5 @@
package rife.apis; package rife.apis;
public interface ServiceProvider { public interface ServiceProvider {
String serviceApi(); MyService getMyService();
} }

View file

@ -1,8 +1,8 @@
package rife.services; package rife.services;
import rife.apis.ServiceProvider; import rife.apis.MyService;
public class HelloService implements ServiceProvider { public class HelloService implements MyService {
@Override @Override
public String serviceApi() { public String serviceApi() {
return "Hello World"; return "Hello World";

View file

@ -40,6 +40,12 @@
<li>When you're done, delete the database through <a href="{{v route:/}}remove">{{v route:/}}remove</a></li> <li>When you're done, delete the database through <a href="{{v route:/}}remove">{{v route:/}}remove</a></li>
</ul> </ul>
<h2>HelloDependencyInjection</h2>
<ul>
<li>Open your browser at <a href="{{v route:/}}service1">{{v route:/}}service1</a></li>
<li>Or <a href="{{v route:/}}service2">{{v route:/}}service2</a></li>
</ul>
<h2>HelloErrors</h2> <h2>HelloErrors</h2>
<ul> <ul>
<li>Trigger and exception at <a href="{{v route:/}}error">{{v route:/}}error</a></li> <li>Trigger and exception at <a href="{{v route:/}}error">{{v route:/}}error</a></li>

View file

@ -5,7 +5,7 @@
package rife; package rife;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import rife.apis.ServiceProvider; import rife.apis.MyService;
import rife.services.HelloService; import rife.services.HelloService;
import rife.test.MockConversation; import rife.test.MockConversation;
@ -71,7 +71,7 @@ class HelloTest {
assertEquals("Hello World", m.doRequest("/service1").getText()); assertEquals("Hello World", m.doRequest("/service1").getText());
assertEquals("Hello World", m.doRequest("/service2").getText()); assertEquals("Hello World", m.doRequest("/service2").getText());
m = new MockConversation(new HelloDependencyInjection(new ServiceProvider() { m = new MockConversation(new HelloDependencyInjection(new MyService() {
public String serviceApi() { public String serviceApi() {
return "Test Service"; return "Test Service";
} }

View file

@ -54,6 +54,10 @@ tasks {
project.logger.lifecycle(" Then add names by going to http://localhost:8080/add") project.logger.lifecycle(" Then add names by going to http://localhost:8080/add")
project.logger.lifecycle(" When you're done, delete the database through http://localhost:8080/remove") project.logger.lifecycle(" When you're done, delete the database through http://localhost:8080/remove")
project.logger.lifecycle("") project.logger.lifecycle("")
project.logger.lifecycle(" HelloDependencyInjection:")
project.logger.lifecycle(" Open your browser at http://localhost:8080/service1")
project.logger.lifecycle(" Or http://localhost:8080/service2")
project.logger.lifecycle("")
project.logger.lifecycle(" HelloErrors:") project.logger.lifecycle(" HelloErrors:")
project.logger.lifecycle(" Trigger and exception at http://localhost:8080/error") project.logger.lifecycle(" Trigger and exception at http://localhost:8080/error")
project.logger.lifecycle(" Try any other URL that doesn't exit, ie. http://localhost:8080/treasure") project.logger.lifecycle(" Try any other URL that doesn't exit, ie. http://localhost:8080/treasure")
@ -179,6 +183,17 @@ tasks {
project.logger.lifecycle("") project.logger.lifecycle("")
} }
register<JavaExec>("runHelloDependencyInjection") {
classpath = sourceSets["main"].runtimeClasspath
mainClass.set("rife.HelloDependencyInjection")
project.logger.lifecycle("")
project.logger.lifecycle("================================================================================")
project.logger.lifecycle(" To try this example, open your browser at http://localhost:8080/service1")
project.logger.lifecycle(" Or http://localhost:8080/service2")
project.logger.lifecycle("================================================================================")
project.logger.lifecycle("")
}
register<JavaExec>("runHelloErrors") { register<JavaExec>("runHelloErrors") {
classpath = sourceSets["main"].runtimeClasspath classpath = sourceSets["main"].runtimeClasspath
mainClass.set("rife.HelloErrors") mainClass.set("rife.HelloErrors")