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
This commit is contained in:
Louis DeJardin
2010-04-07 17:55:38 -07:00
parent d77526259b
commit 26add78779
3 changed files with 13 additions and 13 deletions

View File

@@ -164,7 +164,7 @@
<Content Include="Themes\TheAdmin\Views\Layout.ascx" /> <Content Include="Themes\TheAdmin\Views\Layout.ascx" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="App_Data\Sample.Host.config" /> <Content Include="Config\Sample.Host.config" />
<None Include="Themes\TheAdmin\Styles\images\icons.psd" /> <None Include="Themes\TheAdmin\Styles\images\icons.psd" />
<Content Include="Themes\ClassicDark\Content\Images\bodyBackgroundgrey.gif" /> <Content Include="Themes\ClassicDark\Content\Images\bodyBackgroundgrey.gif" />
<Content Include="Themes\ClassicDark\Content\Images\sidebarBackground.gif" /> <Content Include="Themes\ClassicDark\Content\Images\sidebarBackground.gif" />
@@ -342,6 +342,7 @@
<Content Include="Themes\Web.config" /> <Content Include="Themes\Web.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="App_Data\" />
<Folder Include="Themes\ClassicDark\DesignerNotes\" /> <Folder Include="Themes\ClassicDark\DesignerNotes\" />
<Folder Include="Themes\SafeMode\Content\Images\" /> <Folder Include="Themes\SafeMode\Content\Images\" />
</ItemGroup> </ItemGroup>

View File

@@ -35,17 +35,18 @@ namespace Orchard.Environment.ShellBuilders {
// add components by the IDependency interfaces they expose // add components by the IDependency interfaces they expose
foreach (var serviceType in _compositionStrategy.GetDependencyTypes()) { foreach (var serviceType in _compositionStrategy.GetDependencyTypes()) {
var registrar = addingModulesAndServices.RegisterType(serviceType)
.EnableDynamicProxy(dynamicProxyContext)
.InstancePerLifetimeScope();
foreach (var interfaceType in serviceType.GetInterfaces()) { foreach (var interfaceType in serviceType.GetInterfaces()) {
if (typeof(IDependency).IsAssignableFrom(interfaceType)) { if (typeof(IDependency).IsAssignableFrom(interfaceType)) {
var registrar = addingModulesAndServices.RegisterType(serviceType).As(interfaceType).EnableDynamicProxy(dynamicProxyContext); registrar = registrar.As(interfaceType);
if (typeof(ISingletonDependency).IsAssignableFrom(interfaceType)) { if (typeof(ISingletonDependency).IsAssignableFrom(interfaceType)) {
registrar.SingleInstance(); registrar = registrar.SingleInstance();
} }
else if (typeof(ITransientDependency).IsAssignableFrom(interfaceType)) { else if (typeof(ITransientDependency).IsAssignableFrom(interfaceType)) {
registrar.InstancePerDependency(); registrar = registrar.InstancePerDependency();
}
else {
registrar.InstancePerLifetimeScope();
} }
} }
} }

View File

@@ -70,17 +70,15 @@ namespace Orchard.Environment.ShellBuilders {
.GetExportedTypes() .GetExportedTypes()
.Where(type => type.IsClass && !type.IsAbstract && typeof(IDependency).IsAssignableFrom(type)); .Where(type => type.IsClass && !type.IsAbstract && typeof(IDependency).IsAssignableFrom(type));
foreach (var serviceType in dependencies) { foreach (var serviceType in dependencies) {
var registrar = builder.RegisterType(serviceType).EnableDynamicProxy(dynamicProxyContext).InstancePerLifetimeScope();
foreach (var interfaceType in serviceType.GetInterfaces()) { foreach (var interfaceType in serviceType.GetInterfaces()) {
if (typeof(IDependency).IsAssignableFrom(interfaceType)) { if (typeof(IDependency).IsAssignableFrom(interfaceType)) {
var registrar = builder.RegisterType(serviceType).As(interfaceType).EnableDynamicProxy(dynamicProxyContext); registrar = registrar.As(interfaceType);
if (typeof(ISingletonDependency).IsAssignableFrom(interfaceType)) { if (typeof(ISingletonDependency).IsAssignableFrom(interfaceType)) {
registrar.SingleInstance(); registrar = registrar.SingleInstance();
} }
else if (typeof(ITransientDependency).IsAssignableFrom(interfaceType)) { else if (typeof(ITransientDependency).IsAssignableFrom(interfaceType)) {
registrar.InstancePerDependency(); registrar = registrar.InstancePerDependency();
}
else {
registrar.InstancePerLifetimeScope();
} }
} }
} }