Merge branch 'v3.0.0'
diff --git a/packages/dubbo/src/directly-dubbo.ts b/packages/dubbo/src/directly-dubbo.ts
index 99a7b93..1c2250c 100644
--- a/packages/dubbo/src/directly-dubbo.ts
+++ b/packages/dubbo/src/directly-dubbo.ts
@@ -81,10 +81,17 @@
   }
 
   proxyService<T extends Object>(invokeParam: IInvokeParam): T {
-    const {dubboInterface, methods, timeout, group, version} = invokeParam;
+    const {
+      dubboInterface,
+      methods,
+      timeout,
+      group,
+      version,
+      attachments = {},
+    } = invokeParam;
     const proxy = Object.create(null);
 
-    Object.keys(methods).forEach(methodName => {
+    Object.keys(methods).forEach((methodName) => {
       proxy[methodName] = (...args: Array<IHessianType>) => {
         return go(
           new Promise((resolve, reject) => {
@@ -102,6 +109,7 @@
             ctx.group = group;
             ctx.timeout = timeout;
             ctx.version = version;
+            ctx.attachments = attachments;
 
             //check param
             //param should be hessian data type
diff --git a/packages/dubbo/src/types.ts b/packages/dubbo/src/types.ts
index 13c75f9..9da0c8c 100644
--- a/packages/dubbo/src/types.ts
+++ b/packages/dubbo/src/types.ts
@@ -75,6 +75,7 @@
   group?: string;
   version?: string;
   timeout?: number;
+  attachments?: object;
 }
 
 export interface IDubboProps {
@@ -109,6 +110,7 @@
   timeout?: number;
   group?: string;
   methods: {[methodName: string]: Function};
+  attachment: object;
 }
 
 // zookeeper acl shemes must be one of [ 'world', 'ip', 'host', 'auth', 'digest' ]