mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +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 proxy = createCapabilityProxy(capabilityType, capabilityValue, methodsRouterTable)
|
||||
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
|
||||
}
|
||||
|
||||
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? {
|
||||
return try {
|
||||
method.invoke(instance, *args)
|
||||
|
||||
@@ -35,8 +35,13 @@ object AgentContext {
|
||||
_modules[name] = module
|
||||
}
|
||||
|
||||
fun addCapability(capability: String, instance: Any, methods: Map<String, Method>) {
|
||||
val newImpl = CapabilityImplementation(instance.javaClass, instance, methods)
|
||||
fun addCapability(
|
||||
capability: String,
|
||||
instance: Any,
|
||||
cores: Map<Class<*>, Any>,
|
||||
methods: Map<String, Method>
|
||||
) {
|
||||
val newImpl = CapabilityImplementation(instance.javaClass, instance, cores, methods)
|
||||
_capabilities[capability] = newImpl
|
||||
}
|
||||
|
||||
@@ -62,6 +67,7 @@ object AgentContext {
|
||||
data class CapabilityImplementation(
|
||||
val clazz: Class<*>,
|
||||
val instance: Any,
|
||||
val cores: Map<Class<*>, Any>,
|
||||
val methods: Map<String, Method>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user