Morphia IoCUser Guide
Overview
Morphia IoC defines IoC services and contributions for the afMorphia and afMongo libraries.
It provides injectable instances of:
For afMongo:
- MongoClient
- MongoColl
- MongoConnMgr
- MongoDb
- MongoSeqs
For afMorphia:
- BsonConvs
- Datastore
- Morhpia
All that is required, is an IocConfig contribution for "afMorphia.mongoUrl".
Quick Start
Example usage showing injectable fields.
using afIoc
using afIocConfig
using afBson
using afMongo
using afMorphia
class Example {
    // Mongo services
    @Inject MongoConnMgr?   connMgr
    @Inject MongoClient?    client
    @Inject MongoDb?        db
    @Inject MongoSeqs?      seqs
    @Inject { type=ExampleUser# }
            MongoColl?      collection
    // Morphia services
    @Inject Morphia?        morphia
    @Inject BsonConvs?      bsonConvs
    @Inject { type=ExampleUser# }
            Datastore?      datastore
    Void main() {
        scope := RegistryBuilder()
            .addModulesFromPod("afMorphiaIoc")
            .addModule(ExampleModule#)
            .build
            .rootScope
        scope.inject(this)
        echo("Done.")
        scope.registry.shutdown
    }
}
@Entity
class ExampleUser {
    @BsonProp ObjectId   _id
    @BsonProp Str        name
    @BsonProp Int        age
    new make(|This|in) { in(this) }
}
const class ExampleModule {
    @Contribute { serviceType=ApplicationDefaults# }
    Void contributeAppDefaults(Configuration config) {
        config["afMorphia.mongoUrl"] = `mongodb://localhost:27017/afMorphiaTest`
    }
}