Novolis Docs
novolis-physics / examples/dependency-injection.md

Optional: Microsoft.Extensions.DependencyInjection

dotnetphysicssimulationnovolis

Novolis.Physics does not ship a DI package. If your app already uses Microsoft.Extensions.DependencyInjection, you can register shared algorithms yourself.

See also: INTEGRATION.md · ballistics.md

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Novolis.Physics.Abstractions;
using Novolis.Physics.Aerodynamics;
using Novolis.Physics.Ballistics;
using Novolis.Physics.Collision.Simple;
using Novolis.Physics.Gravity;
using Novolis.Physics.Motion;

static void AddNovolisPhysics(IServiceCollection services, double fixedDeltaSeconds = 1.0 / 60.0)
{
    services.TryAddSingleton<IIntegrator<RigidBodyState>, SemiImplicitEulerRigidBodyIntegrator>();
    services.TryAddSingleton<PointMassGravityModel>();
    services.TryAddSingleton<PatchedConicGravityModel>();
    services.TryAddSingleton<ProjectileSemiImplicitIntegrator>();
    services.TryAddSingleton<SimpleLiftDragModel>();
    services.TryAddSingleton<IAtmosphereModel>(_ => new ExponentialAtmosphereModel(1.225, 8500));
    services.TryAddSingleton<IStaticWorld, EmptyStaticWorld>();
    services.TryAddSingleton(_ => new FixedStepAccumulator(fixedDeltaSeconds));
}

You still construct SimulationPipeline<TBody, TEnvironment> and environment values (PointMassField, meshes, etc.) in application code — DI only holds shared algorithms.