c# – 在Startup.cs之外实现依赖注入

前端之家收集整理的这篇文章主要介绍了c# – 在Startup.cs之外实现依赖注入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在ASP.NET CORE 1中实现依赖注入.我知道一切都是关于.Net Core中的DI.例如
  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. // Add application services.
  4. services.AddTransient<IDateTime,SystemDateTime>();
  5. }

但是对于拥有20多个实体和服务的大型项目来说,写入ConfigurationServices中的所有代码行是非常困难和不可读的.我想知道这是否可能在Startup.cs之外执行依赖注入,然后将其添加到服务中.

感谢您的答案.

解决方法

您可以编写IServiceCollection的扩展方法,将许多服务注册封装到Startup.cs中的一行代码

例如这里有一个来自我的项目:

  1. using cloudscribe.Core.Models;
  2. using cloudscribe.Core.Models.Setup;
  3. using cloudscribe.Core.Web;
  4. using cloudscribe.Core.Web.Components;
  5. using cloudscribe.Core.Web.Components.Editor;
  6. using cloudscribe.Core.Web.Components.Messaging;
  7. using cloudscribe.Core.Web.Navigation;
  8. using cloudscribe.Web.Common.Razor;
  9. using cloudscribe.Web.Navigation;
  10. using cloudscribe.Web.Navigation.Caching;
  11. using Microsoft.AspNetCore.Http;
  12. using Microsoft.AspNetCore.Mvc.Razor;
  13. using Microsoft.Extensions.Configuration;
  14. using Microsoft.Extensions.DependencyInjection.Extensions;
  15. using Microsoft.Extensions.FileProviders;
  16. using Microsoft.Extensions.Options;
  17. using System.Reflection;
  18. using Microsoft.AspNetCore.Authorization;
  19.  
  20. namespace Microsoft.Extensions.DependencyInjection
  21. {
  22. public static class StartupExtensions
  23. {
  24. public static IServiceCollection AddCloudscribeCore(this IServiceCollection services,IConfigurationRoot configuration)
  25. {
  26. services.TryAddSingleton<IHttpContextAccessor,HttpContextAccessor>();
  27. services.Configure<MultiTenantOptions>(configuration.GetSection("MultiTenantOptions"));
  28. services.Configure<SiteConfigOptions>(configuration.GetSection("SiteConfigOptions"));
  29. services.Configure<UIOptions>(configuration.GetSection("UIOptions"));
  30. services.Configure<CkeditorOptions>(configuration.GetSection("CkeditorOptions"));
  31. services.Configure<CachingSiteResolverOptions>(configuration.GetSection("CachingSiteResolverOptions"));
  32. services.AddMultitenancy<SiteContext,CachingSiteResolver>();
  33. services.AddScoped<CacheHelper,CacheHelper>();
  34. services.AddScoped<SiteManager,SiteManager>();
  35. services.AddScoped<GeoDataManager,GeoDataManager>();
  36. services.AddScoped<SystemInfoManager,SystemInfoManager>();
  37. services.AddScoped<IpAddressTracker,IpAddressTracker>();
  38. services.AddScoped<SiteDataProtector>();
  39. services.AddCloudscribeCommmon();
  40. services.AddScoped<ITimeZoneIdResolver,RequestTimeZoneIdResolver>();
  41. services.AddCloudscribePagination();
  42. services.AddScoped<IVersionProviderFactory,VersionProviderFactory>();
  43. services.AddScoped<IVersionProvider,CloudscribeCoreVersionProvider>();
  44. services.AddTransient<ISiteMessageEmailSender,SiteEmailMessageSender>();
  45. services.AddTransient<ISmsSender,SiteSmsSender>();
  46. services.AddSingleton<IThemeListBuilder,SiteThemeListBuilder>();
  47. services.TryAddScoped<ViewRenderer,ViewRenderer>();
  48. services.AddSingleton<IOptions<NavigationOptions>,SiteNavigationOptionsResolver>();
  49. services.AddScoped<ITreeCacheKeyResolver,SiteNavigationCacheKeyResolver>();
  50. services.AddScoped<INodeUrlPrefixProvider,FolderTenantNodeUrlPrefixProvider>();
  51. services.AddCloudscribeNavigation(configuration);
  52.  
  53. services.AddCloudscribeIdentity();
  54.  
  55. return services;
  56. }
  57.  
  58.  
  59. }
  60. }

在Startup.cs中,我用一行代码调用方法

  1. services.AddCloudscribeCore(Configuration);

猜你在找的C#相关文章