using Autofac; using OpenDiablo2.Common.Attributes; using OpenDiablo2.Common.Interfaces; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OpenDiablo2.Scenes { public sealed class AutofacModule : Module { private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); protected override void Load(ContainerBuilder builder) { log.Info("Configuring OpenDiablo2.Scenes service implementations."); var types = ThisAssembly.GetTypes().Where(x => typeof(IScene).IsAssignableFrom(x) && x.IsClass); foreach (var type in types) { var att = type.GetCustomAttributes(true).First(x => typeof(SceneAttribute).IsAssignableFrom(x.GetType())) as SceneAttribute; builder .RegisterType(type) .Keyed(att.SceneName) .InstancePerDependency(); } } } }