我想在ASP.NET CORE 1中实现依赖注入.我知道一切都是关于.Net Core中的DI.例如
public void ConfigureServices(IServiceCollection services) { // Add application services. services.AddTransient<IDateTime,SystemDateTime>(); }
但是对于拥有20多个实体和服务的大型项目来说,写入ConfigurationServices中的所有代码行是非常困难和不可读的.我想知道这是否可能在Startup.cs之外执行依赖注入,然后将其添加到服务中.
感谢您的答案.
解决方法
您可以编写IServiceCollection的扩展方法,将许多服务注册封装到Startup.cs中的一行代码中
例如这里有一个来自我的项目:
using cloudscribe.Core.Models; using cloudscribe.Core.Models.Setup; using cloudscribe.Core.Web; using cloudscribe.Core.Web.Components; using cloudscribe.Core.Web.Components.Editor; using cloudscribe.Core.Web.Components.Messaging; using cloudscribe.Core.Web.Navigation; using cloudscribe.Web.Common.Razor; using cloudscribe.Web.Navigation; using cloudscribe.Web.Navigation.Caching; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Razor; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Options; using System.Reflection; using Microsoft.AspNetCore.Authorization; namespace Microsoft.Extensions.DependencyInjection { public static class StartupExtensions { public static IServiceCollection AddCloudscribeCore(this IServiceCollection services,IConfigurationRoot configuration) { services.TryAddSingleton<IHttpContextAccessor,HttpContextAccessor>(); services.Configure<MultiTenantOptions>(configuration.GetSection("MultiTenantOptions")); services.Configure<SiteConfigOptions>(configuration.GetSection("SiteConfigOptions")); services.Configure<UIOptions>(configuration.GetSection("UIOptions")); services.Configure<CkeditorOptions>(configuration.GetSection("CkeditorOptions")); services.Configure<CachingSiteResolverOptions>(configuration.GetSection("CachingSiteResolverOptions")); services.AddMultitenancy<SiteContext,CachingSiteResolver>(); services.AddScoped<CacheHelper,CacheHelper>(); services.AddScoped<SiteManager,SiteManager>(); services.AddScoped<GeoDataManager,GeoDataManager>(); services.AddScoped<SystemInfoManager,SystemInfoManager>(); services.AddScoped<IpAddressTracker,IpAddressTracker>(); services.AddScoped<SiteDataProtector>(); services.AddCloudscribeCommmon(); services.AddScoped<ITimeZoneIdResolver,RequestTimeZoneIdResolver>(); services.AddCloudscribePagination(); services.AddScoped<IVersionProviderFactory,VersionProviderFactory>(); services.AddScoped<IVersionProvider,CloudscribeCoreVersionProvider>(); services.AddTransient<ISiteMessageEmailSender,SiteEmailMessageSender>(); services.AddTransient<ISmsSender,SiteSmsSender>(); services.AddSingleton<IThemeListBuilder,SiteThemeListBuilder>(); services.TryAddScoped<ViewRenderer,ViewRenderer>(); services.AddSingleton<IOptions<NavigationOptions>,SiteNavigationOptionsResolver>(); services.AddScoped<ITreeCacheKeyResolver,SiteNavigationCacheKeyResolver>(); services.AddScoped<INodeUrlPrefixProvider,FolderTenantNodeUrlPrefixProvider>(); services.AddCloudscribeNavigation(configuration); services.AddCloudscribeIdentity(); return services; } } }
services.AddCloudscribeCore(Configuration);