如果@Provides方法很复杂的话,可以将这些代码移动到单独的类中。这个类需要实现Guice的Provider 接口,该接口定义如下:
- public interface Provider<T> {
- T get();
- }
为一个generic 接口。
本例我们定义一个PathProvider,用于返回一个Path对象:
- public class PathProvider implements Provider<Path>{
- private String pathdata
- = "M 60 20 Q -40 70 60 120 Q 160 70 60 20 z";
- @Override
- public Path get() {
- return Path.fromString(pathdata);
- }
- }
然后在Module中定义从Path类到Provider的绑定:
- bind(Path.class).toProvider(PathProvider.class);
然后使用绘制这个Path:
- public class ProviderBindingsDemo extends Graphics2DActivity{
- @Inject Path path;
- protected void drawImage(){
- AffineTransform mat1;
- // Colors
- Color redColor = new Color(0x96ff0000, true);
- Color greenColor = new Color(0xff00ff00);
- Color blueColor = new Color(0x750000ff, true);
- mat1 = new AffineTransform();
- mat1.translate(30, 40);
- mat1.rotate(-30 * Math.PI / 180.0);
- // Clear the canvas with white color.
- graphics2D.clear(Color.WHITE);
- graphics2D.setAffineTransform(new AffineTransform());
- SolidBrush brush = new SolidBrush(greenColor);
- graphics2D.fill(brush, path);
- graphics2D.setAffineTransform(mat1);
- brush = new SolidBrush(blueColor);
- com.mapdigit.drawing.Pen pen
- = new com.mapdigit.drawing.Pen(redColor, 5);
- graphics2D.setPenAndBrush(pen, brush);
- graphics2D.draw(null, path);
- graphics2D.fill(null, path);
- }
- }