-
Notifications
You must be signed in to change notification settings - Fork 0
/
dispatchService.ts
79 lines (64 loc) · 2.11 KB
/
dispatchService.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { DispatchEndpoint } from "./dispatchEndpoint";
import { MessageFilter } from "./messageFilter";
import { RequestDispatcher } from "./requestDispatcher";
import { Message } from "../message";
import { BaseAddressMessageFilter } from "./baseAddressMessageFilter";
import { Url } from "../url";
import {RequestContext} from "../operationContext";
/**
* Represents a service in the dispatcher. Exposes the configuration options for the service.
*
* <uml>
* hide members
* hide circle
* RequestDispatcher *-- DispatchService : services
* DispatchService *-- DispatchEndpoint : endpoints
* DispatchService *- InstanceProvider : instanceProvider
* </uml>
*/
export class DispatchService {
name: string;
endpoints: DispatchEndpoint[] = [];
instanceProvider: InstanceProvider;
/**
* Specifies whether to create an [[OperationContext]] for operations in this service. The default value is 'false'.
*/
createOperationContext = false;
constructor(public dispatcher: RequestDispatcher, name: string) {
if(!dispatcher) {
throw new Error("Missing required parameter 'dispatcher'.");
}
if(!name) {
throw new Error("Missing required parameter 'name'.");
}
this.name = name;
}
/**
* Validates that the service is correctly configured.
*/
validate(): void {
if(!this.instanceProvider) {
this._throwConfigError("Undefined 'instanceProvider'.");
}
this.endpoints.forEach(endpoint => endpoint.validate());
}
/**
* Throws a configuration error.
* @param message A message to display
* @hidden
*/
private _throwConfigError(message: string): void {
throw new Error("Service '" + this.name + "' incorrectly configured." + message);
}
}
/**
* Describes a type that can provide service insteances.
*/
export interface InstanceProvider {
/**
* Gets an instance of a service.
* @param message The request message.
* @param request The request context.
*/
getInstance(message: Message, request: RequestContext): Object;
}