---
title: SAIF.Framework.Core dependencies
summary: Internal and external dependencies for the SAIF.Framework.Core Business Object Framework library.
status: draft
owner: <owner>
last_reviewed: 2026-07-23
library: SAIF.Framework.Core
reference_type: package
---

# SAIF.Framework.Core dependencies

`SAIF.Framework.Core` is the repository's foundational library (frameworkDensity: 0) — other libraries depend on it, not vice versa. Despite this, Core itself is not dependency-free: it references several sibling libraries in the same repository and a set of external NuGet packages supporting its dual SQL/Oracle-SQL-Server and REST-API data-access models.

## Internal dependencies

| Dependency | Type | Usage |
| --- | --- | --- |
| [SAIF.Framework.Bindable](../saif-framework-bindable/overview.md) | Internal | Project reference (`..\SAIF.Framework.Bindable\SAIF.BOF.Framework.Bindable.csproj`); bundled into the same NuGet package via `IncludeReferencedProjects: true`. |
| [SAIF.Framework.Connection](../saif-framework-connection/overview.md) | Internal | Project reference (`..\SAIF.Framework.Connection\SAIF.BOF.Framework.Connection.vbproj`); imported via `Imports SAIF.Framework.Connection`, used by Core's data-access base classes (e.g. `clsDataAccess`).* See [Configuration](configuration.md) for the transitive `ConnectInfo` endpoint setting that backs Core's Oracle and SQL Server connection-string resolution. |
| [SAIF.Framework.DNS](../saif-framework-dns/overview.md) | Internal | Project reference (`..\SAIF.Framework.DNS\SAIF.BOF.Framework.DNS.csproj`); bundled into the same NuGet package via `IncludeReferencedProjects: true`. |
| [SAIF.Framework.Logging](../saif-framework-logging/overview.md) | Internal | Project reference (`..\SAIF.Framework.Logging\SAIF.BOF.Framework.Logging.vbproj`); imported via `Imports SAIF.Framework.Logging`, used by Core's data-access base classes.* |
| [SAIF.Framework.Security.EnvironmentApi](../saif-framework-security-environmentapi/overview.md) | Internal | Project reference (`..\SAIF.Framework.Security.EnvironmentApi\SAIF.BOF.Framework.Security.EnvironmentApi.csproj`); bundled into the same NuGet package via `IncludeReferencedProjects: true`. Core also reaches this dependency through `AppGlobal.EnvironmentService` for `workCalendarServiceUrl`; see [Configuration](configuration.md) for the direct key and required bootstrap settings. |
| [SAIF.Framework.Security](../saif-framework-security/overview.md) | Internal | Project reference (`..\SAIF.Framework.Security\SAIF.BOF.Framework.Security.vbproj`); imported via `Imports SAIF.Framework.Security` at the project level, though no call site within Core itself was found invoking a security/authorization API from it during this scan.** |

## External dependencies

| Dependency | Version | Usage |
| --- | --- | --- |
| Oracle.ManagedDataAccess | 21.5.0 | Oracle vendor ODP.NET managed driver, consumed by `clsMSOracleDataLayer`/`clsMSOracleDataPortal`/`MSOracleDataRequest`/`MSOraclePortalRequest` (`V1\DataAccessLayer\MSOracle\`); registered as a `DbProviderFactories` entry and an `oracle.manageddataaccess.client` custom config section in `app.config`. |
| RestSharp | 106.12.0 | REST client library underlying the API-oriented business-object model (`V1\Api\`): `ApiClient`/`IApiClient`, `ApiRequest`/`IApiRequest`, `ApiResult`/`IApiResult`, `clsDataApiAccess`/`IDataApiAccess`. |
| Newtonsoft.Json | 13.0.3 | JSON serialization dependency (excluded-prefix per dependency-resolution config, but noted as a direct package reference). |
| SAIF.Framework.Common | 2.0.22074.3 | Framework-inherited SAIF internal NuGet package (same-organization framework dependency, distinct from the same-repo project references above). |
| SAIF.Web.API.Clients | 2.0.22307.1 | Framework-inherited SAIF internal NuGet package, supporting the API-oriented business-object/REST client plumbing. |
| SAIF.Web.API.Core | 2.0.22307.1 | Framework-inherited SAIF internal NuGet package, supporting the API-oriented business-object/REST client plumbing. |

## Dependency risks and notes
- **V1/V2 rules engine coexistence**: Two generations of the business rules engine — `clsRulesManager` (V1, `V1\BusinessRules\`) and `RuleManager` (V2, `V2\BusinessRules\`) — coexist in the same assembly. Every `clsBusinessBase` instance still owns a V1 `clsRulesManager` (`m_Rules As New clsRulesManager`, `clsBusinessBase.vb:987`); no code within Core was observed wiring V2 rule types into the base classes. This is a maintenance and clarity risk: consumers must know which engine (`clsRulesManager` vs. `RuleManager`) is actually active, and the presence of an unused/partially-adopted V2 surface increases the chance of divergence or accidental misuse.**
- **Parallel V1/V2 smart value types**: Similarly, `clsSmartString`/`clsSmartDate`/`clsSmartDecimal`/`clsSmartProperty` (V1) coexist with `SmartValue`/`SmartString`/`SmartDate`/`SmartDecimal`/`SmartInteger`/`ISmartValue` (V2) in the same assembly, with V1 remaining the base classes' active integration point. This doubles the surface area consuming libraries must be aware of when choosing which smart-value types to use.*
- **Core is not a dependency-free leaf**: Although architecturally foundational, Core has outbound project references and `Imports` on `SAIF.Framework.Security`, `SAIF.Framework.Connection`, `SAIF.Framework.Logging`, `SAIF.Framework.DNS`, `SAIF.Framework.Security.EnvironmentApi`, and `SAIF.Framework.Bindable`. This inverts the naive assumption that the "core" library has no repository-internal dependencies, and means changes to those sibling libraries can affect Core's build/behavior.*
- **Dual database driver support increases surface area**: `IDataLayer` is implemented separately for Oracle (`clsMSOracleDataLayer`, on `Oracle.ManagedDataAccess`) and SQL Server (`clsSQLDataLayer`), each with parallel `IDataPortal`/`IDataRequest`/`IPortalRequest` implementations. Any change to the shared `IDataLayer`/`IDataPortal` contracts must be validated against both driver implementations.
- **API-and-DB hybrid model (`clsBusinessApiCriteriaBase`)**: `RestSharp`-based API business objects and SQL-based business objects share the same `IBusinessCriteria`/`IBusinessApiCriteria` contract hierarchy, with API criteria's SQL properties always empty by design. A future change to `IBusinessCriteria` risks inadvertently breaking the API path, which relies on the SQL properties never being populated.*
- **Packaging bundles the whole repository**: Because the nuspec `<file>` glob (`..\**\*.vb;..\**\*.cs`, evaluated relative to the repository root) combined with `IncludeReferencedProjects: true`, the single NuGet package `SAIF.BOF.Framework` bundles compiled DLLs for Core's referenced projects plus raw source from every top-level library folder in the repository. Any library change anywhere in the repo can affect the contents of the package built from Core's project as the pack root.
- **No config-driven database connection info in Core**: Connection strings/DB user/database name are supplied as constructor parameters to `clsDataPortalInfo` by calling code rather than resolved from `ConfigurationManager.AppSettings`/`IEnvironmentService` within Core itself; consumers are responsible for supplying and securing this information.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Configuration](configuration.md)
- [API reference](api/index.md)

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- `SAIF.Framework.Core\SAIF.BOF.Framework.Core.vbproj`
- `SAIF.Framework.Core\packages.config`
- `SAIF.Framework.Core\nuget.config`
- `SAIF.Framework.Core\SAIF.BOF.Framework.Core.nuspec`
- `SAIF.Framework.Core\app.config`
- `SAIF.Framework.Core\V1\BaseItems\clsBusinessBase.vb`
- `SAIF.Framework.Core\V1\BusinessRules\clsRulesManager.vb`
- `SAIF.Framework.Core\V2\BusinessRules\` (RuleManager and related types)
- `SAIF.Framework.Core\V1\SmartValues\` (clsSmartString, clsSmartDecimal, clsSmartDate, clsSmartProperty)
- `SAIF.Framework.Core\V2\SmartValues\` (SmartValue, SmartString, SmartDate, SmartDecimal, SmartInteger, ISmartValue)
- `SAIF.Framework.Core\V1\Api\clsBusinessApiCriteriaBase.vb`
- `SAIF.Framework.Core\V1\DataAccessLayer\MSOracle\MSOracleDataLayer.vb`
- `SAIF.Framework.Core\V1\DataAccessLayer\SQLServer\SQLDataLayer.vb`
- `SAIF.Framework.Core\V1\DataAccessLayer\clsDataPortalInfo.vb`
- `Pipelines\build-vars.yml`
