مهارتهای تزریق وابستگیها در برنامههای NET Core. - قسمت چهارم - پرهیز از الگوی Service Locator در برنامههای وب
نویسنده: وحید نصیری
تاریخ: ۱۳۹۷/۱۰/۱۲ ۹:۵۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class Startup
{
public void ConfigureServices(IServiceCollection services) { }
public void Configure(IApplicationBuilder app, IAmACustomService customService)
{
// ....
}
} public class TestMiddleware
{
public TestMiddleware(RequestDelegate next, IAmACustomService service)
{
// ...
}
public async Task Invoke(HttpContext context, IAmACustomService service)
{
// ...
}
} public static IWebHostBuilder CreateDefaultBuilder(string[] args)
{
var builder = new WebHostBuilder()
//...
.UseDefaultServiceProvider((context, options) =>
{
options.ValidateScopes = context.HostingEnvironment.IsDevelopment();
})
//... public class HelloController : Controller
{
private readonly IAmACustomService _customService;
public HelloController(IAmACustomService customService)
{
_customService = customService;
}
public IActionResult Get()
{
// ...
}
} [HttpGet("[action]")]
public IActionResult Index([FromServices] IAmACustomService service)
{
// ...
} public IActionResult Index(TestModel model)
{
// ...
} public class TestModel
{
public string Name { get; set; }
[FromServices]
public IAmACustomService CustomService { get; set; }
} @inject IAmACustomService CustomService
public class ApiExceptionFilter : ExceptionFilterAttribute
{
private ILogger<ApiExceptionFilter> _logger;
private IHostingEnvironment _environment;
private IConfiguration _configuration;
public ApiExceptionFilter(IHostingEnvironment environment, IConfiguration configuration, ILogger<ApiExceptionFilter> logger)
{
_environment = environment;
_configuration = configuration;
_logger = logger;
} [Route("api/[controller]")]
[ApiController]
[ServiceFilter(typeof(ApiExceptionFilter))]
public class ValuesController : ControllerBase
{ readonly ITicketRepository _ticketRepository;
public TicketCreatedEventHandler([FromServices]ITicketRepository ticketRepository)
{
_ticketRepository = ticketRepository;
} Unresolved dependency [Target Type: Application.EventHandlers.TicketCreatedEventHandler], [Parameter: ticketRepository(Domain.IRepositories.ITicketRepository)], [Requested dependency: ServiceType:Domain.IRepositories.ITicketRepository, ServiceName:]'
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
} using CoreIocServices;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
namespace CoreIocSample02
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(serviceCollection =>
{
serviceCollection.AddScoped<ISomeService, SomeService>();
})
.UseStartup<Startup>();
}
} namespace CoreIocSample02
{
public class Startup
{
private readonly ISomeService _someService;
public Startup(IConfiguration configuration, ISomeService someService)
{
Configuration = configuration;
_someService = someService;
}
public IConfiguration Configuration { get; } public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>(); public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}); WebHost.CreateDefaultBuilder()
.UseStartup<Startup>()
.ConfigureServices(services =>
services.AddSingleton<MySingleton>())
.Build()
.Run();