the OpenAccess runtime constructs it's needed meta data completely during opening of the database.
At this point in time, all the classes and configurations are needed. The configuration comes from the application configuration file normally, but can also be stored in the resources of a class library. The only important point is that there needs to be a deterministic way to obtain it. The list of assemblies loaded in the current application domain (or something like this) is not enough, because the list might not be filled completely yet or otherwise unreliable. So much to the background.
What you should do is to have a <openaccess> section in the app.config (GUI), that just references the Business layer (<references><reference assemblyname="BL" configrequired="true"/></references>) .
Likewise, the BL should reference the DB-Layer. In this way, the application knows only the minimum,
but still is able to obtain all information by traversing the app.config files openaccess section.
Alternativly you could have a look at the Database.Get(string,XmlElement,Assembly) method
Again, all is about reliably finding the configuration and classes.