using Autofac;
using GreenTree.Nachtragsmanagement.Core;
using GreenTree.Nachtragsmanagement.Core.Plugins;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace GreenTree.Nachtragsmanagement.Services.Misc
{
public class NotificationService : INotificationService
{
///
/// Loads all implementations of the INotificationPlugin
///
public IEnumerable LoadNotificationPlugins()
{
var type = typeof(INotificationPlugin);
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var types = assemblies
.SelectMany(p => p.GetTypes())
.Where(p => type.IsAssignableFrom(p) && !p.IsInterface)
.Select(p => Activator.CreateInstance(p))
.OfType()
.ToList();
return types;
}
///
/// Searches for all implementations of the INotificationPlugin
///
public IEnumerable GetNotificationPlugins()
{
var notificationPlugins = Singleton.Instance.Resolve>();
if (notificationPlugins != null)
return notificationPlugins;
return LoadNotificationPlugins();
}
///
/// Gets a notification plugin by a specific name
///
/// SystemName of notification plugin.
public INotificationPlugin GetNotificationPlugin(string pluginSystemName)
{
if (String.IsNullOrEmpty(pluginSystemName))
return null;
var notificationPlugin = Singleton.Instance.ResolveNamed(pluginSystemName);
if (notificationPlugin != null)
return notificationPlugin;
var notificationPlugins = GetNotificationPlugins();
if (notificationPlugins == null)
return null;
return notificationPlugins
.FirstOrDefault(p => p.SystemName == pluginSystemName);
}
}
}