Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ѧϰASP.NET Core£¬Äã±ØÐëÁ˽âÎÞ´¦²»Ôڵġ°ÒÀÀµ×¢È롱
 
À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ£º2016-7-28
  5272  次浏览      28
 

Ò»¡¢ÒÀÀµ×¢Èë¼ò½é

˵µ½ÒÀÀµ×¢È루Dependency Injection£¬ÒÔϼò³ÆDI£©£¬¾Í±ØÐë˵IoC£¨Inverse of Control£©£¬ºÜ¶àÈ˽«ÕâÁ½Õâ»ìΪһ̸£¬ÆäʵÕâÊÇÁ½¸öÍêÈ«²»Í¬µÄ¸ÅÄ»òÕßÊDz»Í¬¡°²ã´Î¡±µÄÁ½¸ö¸ÅÄÎÒÔøÔÚ¡¶¿ØÖÆ·´×ª£¨IoC£©¡·ºÍ¡¶ÒÀÀµ×¢È루DI£©¡·¶ÔÕâÁ½¸ö¸ÅÄî×ö¹ýÏêϸ½éÉÜ¡£ASP.NET CoreʹÓõÄDI¿ò¼ÜÓÉ¡°Micorosoft.Extensions.DependencyInjection¡±Õâ¸öNuGet°üÀ´³ÐÔØ£¬ÎÒÃÇÒ²¿ÉÒÔ·ÇASP.NET CoreÓ¦ÓûòÕßÄã×Ô¼ºµÄ¿ò¼ÜÉϵ¥¶ÀʹÓÃËü£¬¶ÔÓÚÕâ¸öDI¿ò¼ÜµÄÉè¼Æ¡¢ÊµÏÖÒÔ¼°±à³ÌÏà¹ØµÄÄÚÈÝ£¬ÎÒÔÚϵÁÐÎÄÕ¡¶ASP.NET Core ÖеÄÒÀÀµ×¢Èë [¹²7ƪ]¡·¶Ô´ËÓйýÏêϸµÄ½éÉÜ¡£

DI¿ò¼Ü¾ßÓÐÁ½¸öºËÐĵŦÄÜ£¬¼´·þÎñµÄ×¢²áºÍÌṩ£¬ÕâÁ½¸ö¹¦ÄÜ·Ö±ðÓɶÔÓ¦µÄ¶ÔÏóÀ´³ÐÔØ, ËüÃÇ·Ö±ðÊÇServiceCollectionºÍServiceProvider¡£ÈçÏÂͼËùʾ£¬ÎÒÃǽ«ÏàÓ¦µÄ·þÎñÒÔ²»Í¬µÄÉúÃüÖÜÆÚģʽ£¨Transient¡¢ScopedºÍSingleton£©×¢²áµ½ServiceCollection¶ÔÏóÖ®ÉÏ£¬ÔÚÀûÓúóÕß´´½¨µÄServiceProvider¸ù¾Ý×¢²áµÄ·þÎñÀàÐÍÌáÈ¡ÏàÓ¦µÄ·þÎñ¶ÔÏó¡£

¶þ¡¢ÒÀÀµ×¢ÈëÔڹܵÀ¹¹½¨¹ý³ÌÖеÄʹÓÃ

ÔÚASP.NET Core¹ÜµÀµÄ¹¹¼Ü¹ý³ÌÖÐÖ÷񻃾¼°Èý¸ö¶ÔÏó/ÀàÐÍ£¬×÷ΪËÞÖ÷µÄWebHostºÍËûµÄ´´½¨ÕßWebHostBuilder£¬ÒÔ¼°×¢²áµ½WebHostBuilderµÄStartupÀàÐÍ¡£ ÈçϵĴúÂëÆ¬¶ÎÌåÏÖÁËÆô¶¯ASP.NET CoreÓ¦ÓòÉÓõĵäÐͱà³Ìģʽ£ºÎÒÃÇÊ×ÏÈ´´½¨Ò»¸öWebHostBuilder¶ÔÏ󣬲¢½«²ÉÓÃServerºÍStartupÀàÐÍ×¢²áµ½ËüÖ®ÉÏ¡£ÔÚµ÷ÓÃBuild·½·¨´´½¨WebHost֮ǰ£¬ÎÒÃÇ»¹¿ÉÒÔµ÷ÓÃÏàÓ¦µÄ·½Ê½×öÆäËûËùÐèµÄ×¢²á¹¤×÷¡£µ±ÎÒÃǵ÷ÓÃWebHostµÄRun·½·¨Ö®ºó£¬ºóÕß»áÀûÓÃ×¢²áµÄStartupÀàÐÍÀ´¹¹½¨ÍêÕûµÄ¹ÜµÀ¡£ÄÇôÔڹܵÀµÄ¹¹½¨¹ý³ÌÖУ¬DIÊÇÈçºÎ±»Ó¦ÓõÄÄØ£¿

 1:new WebHostBuilder()
2: .UseKestrel()
3: .UseStartup<Startup>()
4: .Xxx
5: .Build()
6: .Run()

DIÔڹܵÀASP.NET Core¹ÜµÀ¹¹½¨¹ý³ÌÖеÄÓ¦Óûù±¾ÌåÏÖÏÂÃæÕâ¸öÐòÁÐͼÖС£µ±ÎÒÃǵ÷ÓÃWebHostBuilderµÄBuild·½·¨´´½¨¶ÔÓ¦µÄWebHostµÄʱºò£¬Ç°Õ߻ᴴ½¨Ò»¸öServiceCollection¶ÔÏ󣬲¢½«Ò»ÏµÁÐÔ¤¶¨ÒåµÄ·þÎñ×¢²áÔÚËüÖ®ÉÏ¡£½ÓÏÂÀ´WebHostBuilder»áÀûÓÃÕâ¸öServiceCollection¶ÔÏó´´½¨³ö¶ÔÓ¦µÄServieProvider£¬Õâ¸öServiceProviderºÍServiceCollection¶ÔÏó»áÒ»²¢´«µÝ¸ø×îÖÕ´´½¨WebHost¶ÔÏó¡£µ±ÎÒÃǵ÷ÓÃWebHostµÄRun·½·¨Æô¶¯ËüµÄʱºò£¬Èç¹û×¢²áµÄStartupÊÇÒ»¸öʵÀýÀàÐÍ£¬Ëü»áÀûÓÃÕâ¸öServiceProviderÒÔ¹¹ÔìÆ÷×¢ÈëµÄ·½Ê½´´½¨¶ÔÓ¦µÄStartup¶ÔÏó¡£ËµµÄ¾ßÌåÒ»µã£¬ÎÒÃÇ×¢²áµÄStartupÀàÐ͵Ĺ¹Ô캯ÊýÊÇÔÊÐí¶¨Òå²ÎÊýµÄ£¬µ«ÊDzÎÊýÀàÐͱØÐëÊÇÔ¤ÏÈ×¢²áµ½ServiceCollectionÖеķþÎñÀàÐÍ¡£

×¢²áµÄStartup·½·¨¿ÉÒÔ°üº¬Ò»¸ö¿ÉÑ¡µÄConfigureServices·½·¨£¬Õâ¸ö·½·¨¾ßÓÐÒ»¸öÀàÐÍΪIServiceCollection½Ó¿ÚµÄ²ÎÊý¡£WebHost»á½«WebHostBuilder´«µÝ¸øËüµÄServiceCollection×÷Ϊ²ÎÊýµ÷ÓÃÕâ¸öConfigureServices·½·¨£¬¶øÎÒÃÇÔòÀûÓÃÕâ¸ö·½·¨½«×¢²áµÄÖмä¼þºÍÓ¦ÓÃËùÐèµÄ·þÎñ×¢²áµ½Õâ¸öServiceCollection¶ÔÏóÉÏ¡£ÔÚÕâÖ®ºó£¬ËùÓÐÐèÒªµÄ·þÎñ£¨°üÀ¨¿ò¼ÜºÍÓ¦ÓÃ×¢²áµÄ·þÎñ£©¶¼×¢²áµ½Õâ¸öServiceCollectionÉÏÃæ£¬WebHost»áÀûÓÃËü´´½¨Ò»¸öеÄServiceProvider¡£WebHost»áÀûÓÃÕâ¸öServiceProvider¶ÔÏóÒÔ·½·¨×¢ÈëµÄ·½Ê½µ÷ÓÃStartup¶ÔÏó/ÀàÐ͵ÄConfigure·½·¨£¬×îÖÕÍê³ÉÄã¶ÔÕû¸ö¹ÜµÀµÄ½¨Á¢¡£»»¾ä»°»á˵£¬¶¨ÒåÔÚStartupÀàÐÍÖÐÖ¼ÔÚÓÃÓÚ×¢²áMiddlewareµÄConfigure·½·¨³ýÁ˲ÉÓÃIApplicationBuilder×÷ΪµÚÒ»¸ö²ÎÊýÖ®Í⣬ËüÒÀÈ»¿ÉÒÔ²ÉÓÃ×¢²áµÄÈκÎÒ»¸ö·þÎñÀàÐÍ×÷ΪºóÐø²ÎÊýµÄÀàÐÍ¡£

·þÎñµÄ×¢²á³ýÁËÊÇÏÖÔÚ×¢²áµÄStartupÀàÐ͵ÄConfigureServices·½·¨Ö®Í⣬ʵ¼ÊÉÏ»¹¾ßÓÐÁíÒ»¸öʵÏÖ·½Ê½£¬ÄǾÍÊǵ÷ÓÃWebHostBuilder¾ßÓÐÈç϶¨ÒåµÄConfigureServices·½·¨¡£µ±WebHostBuilder´´½¨³öServiceCollection¶ÔÏó²¢Íê³ÉÁËĬÈÏ·þÎñµÄ×¢²áºó£¬ÎÒÃÇͨ¹ýµ÷ÓÃÕâ¸ö·½·¨Ëù´«ÈëµÄËùÓÐAction<IServiceCollection>¶ÔÏó½«×îÖÕÓ¦Óõ½Õâ¸öServiceCollection¶ÔÏóÉÏ¡£

1: public interface IWebHostBuilder
2: {
3: IWebHostBuilder ConfigureServiecs(Action<IServiceCollection> configureServices);
4: }

ÖµµÃÒ»ÌáµÄÊÇ£¬StartupÀàÐ͵ÄConfigureServices·½·¨ÊÇÔÊÐí¾ßÓÐÒ»¸öIServiceProviderÀàÐ͵ķµ»ØÖµ£¬Èç¹ûÕâ¸ö·½·¨·µ»ØÒ»¸ö¾ßÌåµÄServiceProrivder£¬ÄÇôWebHost½«²»»áÀûÓÃServiceCollectionÀ´´´½¨ServiceProvider£¬¶øÊÇÖ±½ÓʹÓÃÕâ¸ö·µ»ØµÄServiceProviderÀ´µ÷ÓÃStartup¶ÔÏó/ÀàÐ͵ÄConfigure·½·¨¡£Õâʵ¼ÊÉÏÊÇÒ»¸öºÜÓÐÓõÄÀ©Õ¹µã£¬ÎÒÃÇʹÓÃËü¿ÉÒÔʵÏÖÕë¶ÔÆäËüDI¿ò¼ÜµÄ¼¯³É¡£

Èý¡¢ÒÀÀµ·þÎñµÄ×¢²áÓë×¢Èë

½ÓÏÂÀ´ÎÒÃÇͨ¹ýÒ»¸öʵÀýÀ´ÑÝʾÈçºÎÀûÓÃStartupÀàÐ͵ÄConfigureServicesÀ´×¢²á·þÎñ£¬ÒÔ¼°·¢ÉúÔÚStartupÀàÐÍÉϵÄÁ½ÖÖÒÀÀµ×¢ÈëÐÎʽ¡£ÈçÏÂÃæµÄ´úÂëÆ¬¶ÎËùʾ£¬ÎÒÃǶ¨ÒåÁËÁ½¸ö·þÎñ½Ó¿Ú£¨IFooºÍIBar£©ºÍ¶ÔÓ¦µÄʵÏÖÀàÐÍ£¨FooºÍBar£©¡£ÆäÖÐÆäÖзþÎñFooÊÇͨ¹ýµ÷ÓÃWebHostBuilderµÄConfigureServices·½·¨½øÐÐ×¢²áµÄ£¬¶øÁíÒ»¸ö·þÎñBarµÄ×¢²áÔò·¢ÉúÔÚStartupµÄConfigureServices·½·¨ÉÏ¡£¶ÔÓÚStartupÀ´Ëµ£¬Ëü¾ßÓÐÒ»¸öÀàÐÍΪIFooµÄÖ»¶ÁÊôÐÔ£¬¸ÃÊôÐÔÔÚ¹¹Ô캯ÊýÀûÓô«ÈëµÄ²ÎÊý½øÐгõʼ»¯£¬²»ÓÃ˵ÕâÌåÏÖÁËÕë¶ÔStartupµÄ¹¹ÔìÆ÷×¢Èë¡£StartupµÄConfigure·½·¨³ýÁËApplicationBuilder×÷ΪµÚÒ»¸ö²ÎÊýÖ®Í⣬»¹¾ßÓÐÁíÒ»¸öÀàÐÍΪIBarµÄ²ÎÊý£¬ÎÒÃÇÀûÓÃËüÀ´ÑÝʾ·½·¨×¢Èë¡£

 1: public interface IFoo { }
2: public interface IBar { }
3: public class Foo : IFoo { }
4: public class Bar : IBar { }
5:
6: public class Program
7: {
8: public static void Main(string[] args)
9: {
10: new WebHostBuilder()
11: .ConfigureServices(services=>services.AddSingleton<IFoo, Foo>())
12: .UseKestrel()
13: .UseStartup<Startup>()
14: .Build()
15: .Run();
16: }
17: }
18: public class Startup
19: {
20: public IFoo Foo { get; private set; }
21: public Startup(IFoo foo)
22: {
23: this.Foo = foo;
24: }
25: public void ConfigureServices(IServiceCollection services)
26: {
27: services.AddTransient<IBar, Bar>();
28: }
29:
30: public void Configure(IApplicationBuilder app, IBar bar)
31: {
32: app.Run(async context =>
33: {
34: context.Response.ContentType = "text/html";
35: await context.Response.WriteAsync($"IFoo=>{this.Foo}<br/>");
36: await context.Response.WriteAsync($"IBar=>{bar}");
37: });
38: }
39: }

ÔÚStartupµÄConfigure·½·¨ÖУ¬ÎÒÃǵ÷ÓÃApplicationBulderµÄRun·½·¨×¢²áÁËÒ»¸öMiddleware£¬ºóÕß½«Á½¸ö×¢ÈëµÄ·þÎñµÄÀàÐÍ×÷ΪÏìÓ¦µÄÄÚÈÝ¡£µ±ÎÒÃÇÔËÐÐÕâ¸öÓ¦Ó㬲¢ÀûÓÃä¯ÀÀÆ÷·ÃÎÊĬÈϵļàÌýµØÖ·£¨http://localhost:5000£©Ê±£¬ä¯ÀÀÆ÷»á½«×¢ÈëµÄÁ½¸ö·þÎñ¶ÔÏóµÄÀàÐÍÒÔÏÂͼµÄ·½Ê½Õ¹ÏÖ³öÀ´¡£

ËÄ¡¢ÈÃStartupµÄConfigureServices·½·¨·µ»ØÒ»¸öServiceProvider

ÎÒÃÇ˵ע²áµÄStartupÀàÐ͵ÄConfigureServicesÔÊÐí·µ»ØÒ»¸öServiceProvider£¬Õâ¸öÌØÐÔµÄÖØÒªÒâÒåÔÚÓÚËüʹÎÒÃÇ¿ÉÒÔʵÏÖÓëµÚÈý·½DI¿ò¼Ü£¨±ÈÈçUnity¡¢Castle¡¢NinjectºÍAutoFacµÈ£©µÄ¼¯³É¡£ÎÒÃÇÕÕÀý²ÉÓÃÒ»¸öʵÀý¶Ô´Ë×öÒ»¸öÑÝʾ£¬¼òµ¥Æð¼û£¬ÎÒÃDz¢²»»áÕæÕýÀûÓÃij¸ö¾ßÌåµÄDI¿ò¼ÜÀ´´´½¨Õâ¸öServiceProvider£¬¶øÊÇÖ±½Ó´´½¨Ò»¸öеÄServiceCollectionÀ´´´½¨Ëü,Ϊ´ËÎÒÃǶÔÉÏÃæÕâ¸ö³ÌÐò½øÐÐÁËÈçϵĸÄд¡£

  1: public class Program
2: {
3: public static void Main(string[] args)
4: {
5: new WebHostBuilder()
6: .UseKestrel()
7: .UseStartup<Startup>()
8: .Build()
9: .Run();
10: }
11: }
12: public class Startup
13: {
14: public IServiceProvider ConfigureServices(IServiceCollection services)
15: {
16: IServiceCollection newServices = new ServiceCollection();
17: foreach (ServiceDescriptor service in services)
18: {
19: newServices.Add(service);
20: }
21:
22: return newServices
23: .AddSingleton<IFoo, Foo>()
24: .AddSingleton<IBar, Bar>()
25: .BuildServiceProvider();
26: }
27:
28: public void Configure(IApplicationBuilder app, IFoo foo, IBar bar)
29: {
30: app.Run(async context =>
31: {
32: context.Response.ContentType = "text/html";
33: await context.Response.WriteAsync($"IFoo=>{foo}<br/>");
34: await context.Response.WriteAsync($"IBar=>{bar}");
35: });
36: }
37: }

ÈçÉÏÃæµÄ´úÂëÆ¬¶ÎËùʾ£¬ÔÚStartupµÄConfigureServices·½·¨ÖУ¬ÎÒÃÇͨ¹ý¿½±´×¢²áµ½ÏÖÓÐServiceCollectionµÄËùÓÐServiceDescriptorÉú³ÉÁËÒ»¸öеÄServiceCollection£¬Á½¸ö·þÎñFooºÍBar±»×¢²áµ½ºóÕßÖ®ÉÏ¡£¸Ã·½·¨×îÖÕ·µ»ØÓÉÕâ¸öÐÂServiceCollection´´½¨µÄServiceProvider¡£ÔÚÁíÒ»¸öConfigure·½·¨ÖУ¬ÎÒÃÇÌí¼ÓÁËÁ½¸öÀàÐÍ·Ö±ðΪIFooºÍIBarµÄ²ÎÊý£¬²¢ÒÔÏàͬµÄ·½Ê½½«ËüÃǵÄÕæÊµÀàÐÍÃû³ÆºÍ×¢²á·þÎñÀàÐ͵ÄÓ³Éä¹ØÏµ×÷ΪÏìÓ¦ÄÚÈÝ¡£³ÌÐòÔËÐÐÖ®ºó£¬ÎÒÃÇÀûÓÃä¯ÀÀÆ÷½øÐзÃÎÊÕÕÑù»áµÃµ½Ò»ÑùµÄ½á¹û¡£

Îå¡¢ASP.NET CoreĬÈÏ×¢²áÁËÄÄЩ·þÎñ

WebHostBuilderÔÚ´´½¨ServiceCollectionÖ®ºó£¬»á×¢²áһЩĬÈϵķþÎñ¡£ÕâЩ·þÎñºÍÎÒÃÇ×ÔÐÐ×¢²áµÄ·þÎñ²¢Ã»ÓÐÈκÎÇø±ð£¬Ö»ÒªÎÒÃÇÖªµÀ¶ÔÓ¦µÄ·þÎñÀàÐÍ£¬¾Í¿ÉÒÔͨ¹ý×¢ÈëµÄ·½Ê½»ñÈ¡²¢Ê¹ÓÃËüÃÇ¡£ÄÇô¾ßÌåÓÉÄÄЩ·þÎñ±»Ä¬ÈÏ×¢²áÁËÄØ£¿ÈçÏÂËùʾµÄÊÇÕâЩ·þÎñ¶ÔÓ¦µÄÀàÐÍ£¬ÖÁÓÚÕâЩ·þÎñ¸÷×ÔÓкÎÓÃ;£¬ÎÒÃÇÔÚÕâÀï¾ÍÏȲ»ÉÁË¡£

IHostingEnvironment

ILoggerFactory

ILogger<>

IApplicationBuilderFactory

IHttpContextFactory

IOptions<>

DiagnosticSource

DiagnosticListener

IStartupFilter

ObjectPoolProvider

>IStartup

Èç¹ûÎÒÃÇÐèÒªÕâЩԤע²áµÄ·þÎñ£¬ÎÒÃÇ¿ÉÒÔ°´ÕÕÎÒÃÇÊìϤµÄ·½Ê½ÒÔÒÀÀµ×¢ÈëµÄ·½Ê½À´Ê¹ÓÃËüÃÇ¡£ÈçÏÂÃæµÄ´úÂëÆ¬¶ÎËùʾ£¬ÎÒÃÇÔÚStartupµÄConfigure·½·¨ÖÐÖ±½Ó²ÉÓ÷½·¨×¢ÈëµÄ·½Ê½À´Ê¹ÓÃÕâЩԤ¶¨ÒåµÄ·þÎñ¡£

  1: public class Program
2: {
3: public static void Main(string[] args)
4: {
5: new WebHostBuilder()
6: .UseKestrel()
7: .UseStartup<Startup>()
8: .Build()
9: .Run();
10: }
11: }
12: public class Startup
13: {
14: public void Configure(
15: IApplicationBuilder app,
16: IHostingEnvironment environment,
17: ILoggerFactory loggerFactory,
18: IHttpContextFactory httpContextFactory,
19: DiagnosticSource diagnosticSource,
20: DiagnosticListener diagnosticListener)
21: {
22: app.Run(async context =>
23: {
24: context.Response.ContentType = "text/html";
25: await context.Response.WriteAsync
($"IApplicationBuilder=>{app}<br/>");
26: await context.Response.WriteAsync
($"IHostingEnvironment=>{environment}<br/>");
27: await context.Response.WriteAsync
($"ILoggerFactory=>{loggerFactory}<br/>");
28: await context.Response.WriteAsync
($"IHttpContextFactory=>{httpContextFactory}<br/>");
29: await context.Response.WriteAsync
($"DiagnosticSource=>{diagnosticSource}<br/>");
30: await context.Response.WriteAsync
($"DiagnosticListener=>{diagnosticListener}");
31: });
32: }
33: }

ÓÉÓÚConfigure·½·¨×¢²áµÄMiddlewareÖ±½Ó½«×¢Èë·þÎñµÄ×¢²áÀàÐͺÍÕæÊµÀàÐ͵ÄÓ³Éä¹ØÏµ×÷ΪÏìÓ¦ÄÚÈÝ£¬ËùÒÔÎÒÃÇ·ÃÎÊÓ¦ÓûáµÄµÃµ½ÈçÏÂËùʾµÄÊä³ö½á¹û¡£

Áù¡¢ASP.NET Core MVCÖеÄÒÀÀµ×¢Èë

¶ÔÓÚASP.NET MVC 5»úÆ÷ÒÔ¼°Ö®Ç°µÄ°æ±¾£¬ÔÚĬÈÏÇé¿ö϶¨ÒåµÄController¶¼¾ßÓÐÒ»¸öÒªÇó£¬ÄǾÍÊÇControllerÀàÐͱØÐë¾ßÓÐÒ»¸öÎÞ²ÎÊýµÄĬÈϹ¹Ô캯Êý£¬·ñÔòControllerʵÀý½«ÎÞ·¨¼¤»î¡£¶ÔÓÚ×ÔÉí¾ßÓÐÒÀÀµ×¢È빦ÄܵÄASP.NET Core MVCÀ´Ëµ£¬¶¨ÒåController½«Ã»ÓÐÁËÕâ¸öÏÞÖÆ¡£¶ÔÓÚԤע²áµÄ·þÎñ£¬ÎÒÃÇÍêÈ«¿ÉÒÔ²ÉÓù¹ÔìÆ÷×¢ÈëµÄ·½Ê½ÔÚ¶¨ÒåµÄControllerÖÐʹÓÃËüÃÇ¡£×÷ΪÑÝʾ£¬ÎÒÃǶÔÉÏÃæÕâ¸öÓ¦ÓÃ×÷ÁËÈçϵĸÄд¡£

 1: public class Program
2: {
3: public static void Main(string[] args)
4: {
5: new WebHostBuilder()
6: .UseKestrel()
7: .ConfigureServices(services=>services
8: .AddSingleton<IFoo,Foo>()
9: .AddSingleton<IBar,Bar>()
10: .AddMvc())
11: .Configure(app=>app.UseMvc())
12: .Build()
13: .Run();
14: }
15: }
16:
17: public class HomeController
18: {
19: public IFoo Foo { get; private set; }
20: public IBar Bar { get; private set; }
21:
22: public HomeController(IFoo foo, IBar bar)
23: {
24: this.Foo = foo;
25: this.Bar = bar;
26: }
27:
28: [HttpGet("/")]
29: public string Index()
30: {
31: this.HttpContext.Response.ContentType = "text/html";
32: return $"IFoo=>{this.Foo}<br/>IBar=>{this.Bar}";
33: }
34: }

ÉÏÃæÕâ¸ö´úÂëÓë֮ǰÓÐÒ»¸öÏÔÖøµÄÇø±ð£¬ÄǾÍÊÇÎÒÃǸù±¾¾ÍûÓж¨ÒåStartupÀàÐÍ£¬ÎÒÃǽ«Ô­±¾ÊµÏÖÔÚËüµÄÁ½¸ö·½·¨£¨ConfigureServicesºÍConfigure£©ÖеŦÄÜÒÆÖ²µ½ÁËWebHostBuilderµÄͬÃû·½·¨ÖУ¬ÕâÁ½ÖÖÐÎʽµÄ±à³Ì·½Ê½ÆäʵÊǵÈЧµÄ¡£ÔÚµ÷ÓÃConfigureServices·½·¨µÄʱºò£¬ÎÒÃdzýÁË×¢²áMVCÏà¹ØµÄ·þÎñÖ®Í⣬FooºÍBarÕâÁ½¸ö·þÎñÒ²Ò»²¢½øÐÐÁË×¢²á¡£ÖÁÓÚÁíÒ»¸öConfigure·½·¨£¬ÎÒÃÇÖ±½Óµ÷ÓÃÆäÀ©Õ¹·½·¨MVC×¢²áÓëMVCÏà¹ØµÄMiddleware¡£

ÎÒÃǶ¨ÒåÁËÒ»¸öĬÈϵÄHomeController£¬Ëü¾ßÓÐÁ½¸öÀàÐÍ·Ö±ðΪIFooºÍIBarµÄÖ»¶ÁÊôÐÔ£¬ºóÕßÔÚ¹¹Ô캯ÊýÓÉ´«ÈëµÄ²ÎÊý½øÐгõʼ»¯£¬ÎÒÃÇÖªµÀÕâÊǹ¹ÔìÆ÷×¢ÈëµÄ±à³Ì·½Ê½¡£ÔÚAction·½·¨IndexÖÐ £¬ÎÒÃÇÒÀÈ»½«ÕâÁ½¸ö·þÎñµÄ×¢²áÀàÐͺÍÕæÊµÀàÐÍÖ®¼äµÄÆ¥Åä¹ØÏµ×÷ΪÏìÓ¦ÄÚÈÝ£¬ËùÒÔÎÒÃÇ·ÃÎÊÕâ¸öÓ¦ÓÃÒÀÈ»»áµÃµ½ÈçÏÂËùʾµÄÊä³ö½á¹û¡£

   
5272 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ʹÓÃdecj¼ò»¯Webǰ¶Ë¿ª·¢
Web¿ª·¢¿ò¼ÜÐγÉÖ®ÂÃ
¸üÓÐЧÂʵÄʹÓÃVisual Studio
MVP+WCF+Èý²ã½á¹¹´î½¨¿ò¼Ü
ASP.NETÔËÐлúÖÆÇ³Îö¡¾Í¼½â¡¿
±àд¸üºÃµÄC#´úÂë
10¸öVisual Studio¿ª·¢µ÷ÊÔ¼¼ÇÉ

.NET¿ò¼ÜÓë·Ö²¼Ê½Ó¦Óüܹ¹Éè¼Æ
.NET & WPF & WCFÓ¦Óÿª·¢
UML&.Net¼Ü¹¹Éè¼Æ
COM×é¼þ¿ª·¢
.NetÓ¦Óÿª·¢
InstallShield

ÈÕÕÕ¸Û .NET Framework & WCFÓ¦Óÿª·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ
±±¾© .NetÓ¦ÓÃÈí¼þϵͳ¼Ü¹¹
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
ÈüÃÅÌú¿Ë C#Óë.NET¼Ü¹¹Éè¼Æ
¹ã¶«ºËµç .NetÓ¦ÓÃϵͳ¼Ü¹¹