From 26add7877952bc45798ca0c05ed01317ae3c1653 Mon Sep 17 00:00:00 2001 From: Louis DeJardin Date: Wed, 7 Apr 2010 17:55:38 -0700 Subject: [PATCH] Adjusting registration of dependencies to avoid duplications Types are registered once and multiple interfaces result in several services being associated with that component. Any singleton or transient interfaces will adjust the lifecycle of the entire component. --HG-- branch : dev --- src/Orchard.Web/Orchard.Web.csproj | 3 ++- .../ShellBuilders/DefaultShellContainerFactory.cs | 13 +++++++------ .../ShellBuilders/SafeModeShellContainerFactory.cs | 10 ++++------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Orchard.Web/Orchard.Web.csproj b/src/Orchard.Web/Orchard.Web.csproj index bb5f3d4fa..5128a4a58 100644 --- a/src/Orchard.Web/Orchard.Web.csproj +++ b/src/Orchard.Web/Orchard.Web.csproj @@ -164,7 +164,7 @@ - + @@ -342,6 +342,7 @@ + diff --git a/src/Orchard/Environment/ShellBuilders/DefaultShellContainerFactory.cs b/src/Orchard/Environment/ShellBuilders/DefaultShellContainerFactory.cs index 2af7bd087..88991f8ab 100644 --- a/src/Orchard/Environment/ShellBuilders/DefaultShellContainerFactory.cs +++ b/src/Orchard/Environment/ShellBuilders/DefaultShellContainerFactory.cs @@ -35,17 +35,18 @@ namespace Orchard.Environment.ShellBuilders { // add components by the IDependency interfaces they expose foreach (var serviceType in _compositionStrategy.GetDependencyTypes()) { + var registrar = addingModulesAndServices.RegisterType(serviceType) + .EnableDynamicProxy(dynamicProxyContext) + .InstancePerLifetimeScope(); + foreach (var interfaceType in serviceType.GetInterfaces()) { if (typeof(IDependency).IsAssignableFrom(interfaceType)) { - var registrar = addingModulesAndServices.RegisterType(serviceType).As(interfaceType).EnableDynamicProxy(dynamicProxyContext); + registrar = registrar.As(interfaceType); if (typeof(ISingletonDependency).IsAssignableFrom(interfaceType)) { - registrar.SingleInstance(); + registrar = registrar.SingleInstance(); } else if (typeof(ITransientDependency).IsAssignableFrom(interfaceType)) { - registrar.InstancePerDependency(); - } - else { - registrar.InstancePerLifetimeScope(); + registrar = registrar.InstancePerDependency(); } } } diff --git a/src/Orchard/Environment/ShellBuilders/SafeModeShellContainerFactory.cs b/src/Orchard/Environment/ShellBuilders/SafeModeShellContainerFactory.cs index 7eef7c180..cc79d536b 100644 --- a/src/Orchard/Environment/ShellBuilders/SafeModeShellContainerFactory.cs +++ b/src/Orchard/Environment/ShellBuilders/SafeModeShellContainerFactory.cs @@ -70,17 +70,15 @@ namespace Orchard.Environment.ShellBuilders { .GetExportedTypes() .Where(type => type.IsClass && !type.IsAbstract && typeof(IDependency).IsAssignableFrom(type)); foreach (var serviceType in dependencies) { + var registrar = builder.RegisterType(serviceType).EnableDynamicProxy(dynamicProxyContext).InstancePerLifetimeScope(); foreach (var interfaceType in serviceType.GetInterfaces()) { if (typeof(IDependency).IsAssignableFrom(interfaceType)) { - var registrar = builder.RegisterType(serviceType).As(interfaceType).EnableDynamicProxy(dynamicProxyContext); + registrar = registrar.As(interfaceType); if (typeof(ISingletonDependency).IsAssignableFrom(interfaceType)) { - registrar.SingleInstance(); + registrar = registrar.SingleInstance(); } else if (typeof(ITransientDependency).IsAssignableFrom(interfaceType)) { - registrar.InstancePerDependency(); - } - else { - registrar.InstancePerLifetimeScope(); + registrar = registrar.InstancePerDependency(); } } }