mirror of
https://github.com/cadmium-im/zirconium-sharp.git
synced 2024-12-22 17:01:50 +00:00
Implement two example plugins (MongoDB connection wrapper and consumer of this conn wrapper) which is sharing types between them
This commit is contained in:
parent
d14a058d41
commit
a829042581
16
src/ZirconiumPlugins/MongoDB/MongoDB.csproj
Normal file
16
src/ZirconiumPlugins/MongoDB/MongoDB.csproj
Normal file
@ -0,0 +1,16 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../../Zirconium/Zirconium.csproj">
|
||||
<ExcludeAssets>runtime</ExcludeAssets>
|
||||
</ProjectReference>
|
||||
<PackageReference Include="MongoDB.Bson" Version="2.10.4" />
|
||||
<PackageReference Include="MongoDB.Driver" Version="2.10.4" />
|
||||
<PackageReference Include="MongoDB.Driver.Core" Version="2.10.4" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
58
src/ZirconiumPlugins/MongoDB/Plugin.cs
Normal file
58
src/ZirconiumPlugins/MongoDB/Plugin.cs
Normal file
@ -0,0 +1,58 @@
|
||||
using System.Collections.Immutable;
|
||||
using System.Collections.Generic;
|
||||
using Zirconium.Core.Plugins.Interfaces;
|
||||
using MongoDB.Driver;
|
||||
using Zirconium.Core.Logging;
|
||||
|
||||
namespace MongoDBPlugin
|
||||
{
|
||||
class Plugin : IPluginAPI
|
||||
{
|
||||
private IMongoDatabase _database;
|
||||
|
||||
public dynamic GetExportedAPI()
|
||||
{
|
||||
return _database;
|
||||
}
|
||||
|
||||
public System.Type[] GetExportedTypes()
|
||||
{
|
||||
// var mongoCore = Assembly.Load("MongoDB.Driver.Core");
|
||||
// var mongoBson = Assembly.Load("MongoDB.Bson");
|
||||
return new System.Type[] {typeof(IMongoDatabase)};
|
||||
}
|
||||
|
||||
public string GetPluginUniqueName()
|
||||
{
|
||||
return "MongoDB";
|
||||
}
|
||||
|
||||
public void Initialize(IPluginHostAPI pluginHostAPI)
|
||||
{
|
||||
var settingsDynamic = pluginHostAPI.GetSettings(this);
|
||||
var settings = (IImmutableDictionary<string, dynamic>) ((IDictionary<string, object>)settingsDynamic).ToImmutableDictionary();
|
||||
|
||||
var host = (string) settings.GetValueOrDefault("Host");
|
||||
var port = (int) settings.GetValueOrDefault("Port");
|
||||
var user = (string) settings.GetValueOrDefault("User");
|
||||
var password = (string) settings.GetValueOrDefault("Password");
|
||||
var database = (string) settings.GetValueOrDefault("Database");
|
||||
|
||||
MongoClient client;
|
||||
if (user == null && password == null)
|
||||
{
|
||||
client = new MongoClient($"mongodb://{host}:{port}");
|
||||
}
|
||||
else
|
||||
{
|
||||
client = new MongoClient($"mongodb://{user}:{password}@{host}:{port}");
|
||||
}
|
||||
|
||||
var db = client.GetDatabase(database);
|
||||
Log.Info("MongoDB is connected");
|
||||
_database = db;
|
||||
}
|
||||
|
||||
public void PreInitialize(IPluginManager pluginManager) { }
|
||||
}
|
||||
}
|
57
src/ZirconiumPlugins/TestMongoDB/Plugin.cs
Normal file
57
src/ZirconiumPlugins/TestMongoDB/Plugin.cs
Normal file
@ -0,0 +1,57 @@
|
||||
using Zirconium.Core.Plugins.Interfaces;
|
||||
using MongoDB.Driver;
|
||||
using Zirconium.Core.Logging;
|
||||
using System;
|
||||
|
||||
namespace TestMongoDB
|
||||
{
|
||||
class Plugin : IPluginAPI
|
||||
{
|
||||
private IMongoDatabase _database;
|
||||
|
||||
public dynamic GetExportedAPI()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public Type[] GetExportedTypes()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public string GetPluginUniqueName()
|
||||
{
|
||||
return "TestMongoDB";
|
||||
}
|
||||
|
||||
public void Initialize(IPluginHostAPI pluginHostAPI)
|
||||
{
|
||||
var tm = new TestModel();
|
||||
tm.ABC = "qweqowie";
|
||||
_database.GetCollection<TestModel>("test_model").InsertOne(tm);
|
||||
}
|
||||
|
||||
public void PreInitialize(IPluginManager pluginManager)
|
||||
{
|
||||
var db = pluginManager.Depends(this, "MongoDB");
|
||||
var receivedType = db.GetType();
|
||||
Log.Debug(db.GetType().FullName);
|
||||
Log.Debug(db.GetType().AssemblyQualifiedName);
|
||||
foreach (Type i in db.GetType().GetInterfaces()) {
|
||||
Log.Debug("DB object interface: " + i.AssemblyQualifiedName);
|
||||
}
|
||||
Log.Debug("Type info in current assembly context:");
|
||||
var mongoDBType = typeof(IMongoDatabase);
|
||||
Log.Debug(mongoDBType.FullName);
|
||||
Log.Debug(mongoDBType.AssemblyQualifiedName);
|
||||
Log.Debug(new Uri(mongoDBType.Module.Assembly.CodeBase).LocalPath);
|
||||
Log.Debug($"Casting compatibility: {mongoDBType.IsAssignableFrom(db.GetType())}");
|
||||
_database = (IMongoDatabase) db;
|
||||
}
|
||||
}
|
||||
|
||||
class TestModel
|
||||
{
|
||||
public string ABC { get; set; }
|
||||
}
|
||||
}
|
15
src/ZirconiumPlugins/TestMongoDB/TestMongoDB.csproj
Normal file
15
src/ZirconiumPlugins/TestMongoDB/TestMongoDB.csproj
Normal file
@ -0,0 +1,15 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../../Zirconium/Zirconium.csproj">
|
||||
<ExcludeAssets>runtime</ExcludeAssets>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="../MongoDB/MongoDB.csproj"/>
|
||||
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user