mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
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:
@@ -164,7 +164,7 @@
|
||||
<Content Include="Themes\TheAdmin\Views\Layout.ascx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="App_Data\Sample.Host.config" />
|
||||
<Content Include="Config\Sample.Host.config" />
|
||||
<None Include="Themes\TheAdmin\Styles\images\icons.psd" />
|
||||
<Content Include="Themes\ClassicDark\Content\Images\bodyBackgroundgrey.gif" />
|
||||
<Content Include="Themes\ClassicDark\Content\Images\sidebarBackground.gif" />
|
||||
@@ -342,6 +342,7 @@
|
||||
<Content Include="Themes\Web.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="App_Data\" />
|
||||
<Folder Include="Themes\ClassicDark\DesignerNotes\" />
|
||||
<Folder Include="Themes\SafeMode\Content\Images\" />
|
||||
</ItemGroup>
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user