zoukankan      html  css  js  c++  java
  • Provicer Pattern In ASP.NET Core

    using System;
    using System.Collections.Generic;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.DependencyInjection.Extensions;
    using Microsoft.Extensions.Hosting;
    
    namespace Default
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(builder =>
                    {
                        builder.ConfigureServices((ctx, svcs) =>
                        {
                            svcs.AddDefault();
                            svcs.AddTransient<IHandler, FooHandler>();
                        }).Configure((ctx, app) =>
                        {
                            app.UseRouting();
                            app.UseEndpoints(endpoints =>
                            {
                                endpoints.MapGet("/", async context =>
                                {
                                    context.RequestServices.GetRequiredService<IService>().Execute();
                                    await context.Response.WriteAsync("Done");
                                });
                            });
                        });
                    })
                    .Build()
                    .Run();
            }
        }
        public interface IHandler
        {
            void Handle();
        }
        public class DefaultHandler : IHandler
        {
            public void Handle()
            {
                Console.WriteLine("DefaultHandler.Handle");
            }
        }
        public interface IHandlerProvider
        {
            IEnumerable<IHandler> GetHandlers();
        }
        public class DefaultHandlerProvider : IHandlerProvider
        {
            private readonly IEnumerable<IHandler> _handlers;
            public DefaultHandlerProvider(IEnumerable<IHandler> handlers)
            {
                _handlers = handlers;
            }
            public IEnumerable<IHandler> GetHandlers()
            {
                return _handlers;
            }
        }
        public interface IService
        {
            void Execute();
        }
        public class DefaultService : IService
        {
            private readonly IHandlerProvider _handlerProvider;
            public DefaultService(IHandlerProvider handlerProvider)
            {
                _handlerProvider = handlerProvider;
            }
            public void Execute()
            {
                var handlers = _handlerProvider.GetHandlers();
                foreach (var handler in handlers)
                {
                    handler.Handle();
                }
            }
        }
        public static class ServiceCollectionExtensions
        {
            public static IServiceCollection AddDefault(this IServiceCollection services)
            {
                services.TryAdd(ServiceDescriptor.Transient<IService, DefaultService>());
                services.TryAdd(ServiceDescriptor.Transient<IHandlerProvider, DefaultHandlerProvider>());
                services.TryAddEnumerable(ServiceDescriptor.Transient<IHandler, DefaultHandler>());
                return services;
            }
        }
        public class FooHandler : IHandler
        {
            public void Handle()
            {
                Console.WriteLine("FooHandler.Handle");
            }
        }
    }
  • 相关阅读:
    @slf4j 使用方法
    spark入门简单介绍
    spring boot 的简单实用和spring cloud 概念
    nginx与Tomcat
    python27+百度文字识别api
    python27+opencv2.4.10+pytesseract0.2.0图片识别
    学习vue的核心功能
    使用vscode +vue的初始环境搭建
    excel的vlookup,第一次用
    pyautogui键盘鼠标控制,python27
  • 原文地址:https://www.cnblogs.com/xiaowangzhi/p/14067688.html
Copyright © 2011-2022 走看看