mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 08:43:02 +08:00
refactor(framework): register capability core instances per capability and store cores in AgentContext
This commit is contained in:
@@ -34,7 +34,8 @@ class CapabilityRegisterFactory : AgentBaseFactory() {
|
|||||||
val capabilityValue = capabilityType.getAnnotation(Capability::class.java).value
|
val capabilityValue = capabilityType.getAnnotation(Capability::class.java).value
|
||||||
val proxy = createCapabilityProxy(capabilityType, capabilityValue, methodsRouterTable)
|
val proxy = createCapabilityProxy(capabilityType, capabilityValue, methodsRouterTable)
|
||||||
val methods = buildCapabilityMethodMap(capabilityType, capabilityValue, methodBindingMap)
|
val methods = buildCapabilityMethodMap(capabilityType, capabilityValue, methodBindingMap)
|
||||||
agentContext.addCapability(capabilityValue, proxy, methods)
|
val cores = buildCapabilityCoreMap(capabilityValue, coreInstances)
|
||||||
|
agentContext.addCapability(capabilityValue, proxy, cores, methods)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,6 +125,17 @@ class CapabilityRegisterFactory : AgentBaseFactory() {
|
|||||||
return methods
|
return methods
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun buildCapabilityCoreMap(
|
||||||
|
capabilityValue: String,
|
||||||
|
coreInstances: Map<Class<*>, Any>
|
||||||
|
): Map<Class<*>, Any> {
|
||||||
|
return coreInstances
|
||||||
|
.filterKeys { coreType ->
|
||||||
|
coreType.getAnnotation(CapabilityCore::class.java)?.value == capabilityValue
|
||||||
|
}
|
||||||
|
.toMap()
|
||||||
|
}
|
||||||
|
|
||||||
private fun invokeMethod(instance: Any, method: Method, args: Array<Any?>): Any? {
|
private fun invokeMethod(instance: Any, method: Method, args: Array<Any?>): Any? {
|
||||||
return try {
|
return try {
|
||||||
method.invoke(instance, *args)
|
method.invoke(instance, *args)
|
||||||
|
|||||||
@@ -35,8 +35,13 @@ object AgentContext {
|
|||||||
_modules[name] = module
|
_modules[name] = module
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addCapability(capability: String, instance: Any, methods: Map<String, Method>) {
|
fun addCapability(
|
||||||
val newImpl = CapabilityImplementation(instance.javaClass, instance, methods)
|
capability: String,
|
||||||
|
instance: Any,
|
||||||
|
cores: Map<Class<*>, Any>,
|
||||||
|
methods: Map<String, Method>
|
||||||
|
) {
|
||||||
|
val newImpl = CapabilityImplementation(instance.javaClass, instance, cores, methods)
|
||||||
_capabilities[capability] = newImpl
|
_capabilities[capability] = newImpl
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,6 +67,7 @@ object AgentContext {
|
|||||||
data class CapabilityImplementation(
|
data class CapabilityImplementation(
|
||||||
val clazz: Class<*>,
|
val clazz: Class<*>,
|
||||||
val instance: Any,
|
val instance: Any,
|
||||||
|
val cores: Map<Class<*>, Any>,
|
||||||
val methods: Map<String, Method>
|
val methods: Map<String, Method>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user