مهارتهای تزریق وابستگیها در برنامههای NET Core. - قسمت هفتم - کار با سرویسهای متفاوتی با یک امضاء
نویسنده: وحید نصیری
تاریخ: ۱۳۹۷/۱۰/۱۸ ۱۲:۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
namespace CoreIocServices
{
public interface IMessageService
{
void Send(string message);
}
public class EmailService : IMessageService
{
public void Send(string message)
{
// ...
}
}
public class SmsService : IMessageService
{
public void Send(string message)
{
//todo: ...
}
}
} namespace CoreIocSample02
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IMessageService, EmailService>();
services.AddTransient<IMessageService, SmsService>();
} using CoreIocServices;
using Microsoft.AspNetCore.Mvc;
namespace CoreIocSample02.Controllers
{
public class MessagesController : Controller
{
private readonly IMessageService _emailService;
private readonly IMessageService _smsService;
public MessagesController(IMessageService emailService, IMessageService smsService)
{
_emailService = emailService;
_smsService = smsService;
}
}
}
using System.Collections.Generic;
using CoreIocServices;
using Microsoft.AspNetCore.Mvc;
namespace CoreIocSample02.Controllers
{
public class MessagesController : Controller
{
private readonly IEnumerable<IMessageService> _messageServices;
public MessagesController(IEnumerable<IMessageService> messageServices)
{
_messageServices = messageServices;
}
var emailService = _messageServices.OfType<EmailService>().First();
var messageServices = serviceProvider.GetServices<IMessageService>();
namespace CoreIocServices
{
public enum MessageServiceType
{
EmailService,
SmsService
} namespace CoreIocSample02
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<EmailService>();
services.AddTransient<SmsService>(); namespace CoreIocSample02
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<EmailService>();
services.AddTransient<SmsService>();
services.AddTransient<Func<MessageServiceType, IMessageService>>(serviceProvider => key =>
{
switch (key)
{
case MessageServiceType.EmailService:
return serviceProvider.GetRequiredService<EmailService>();
case MessageServiceType.SmsService:
return serviceProvider.GetRequiredService<SmsService>();
default:
throw new NotImplementedException($"Service of type {key} is not implemented.");
}
}); namespace CoreIocSample02.Controllers
{
public class MessagesController : Controller
{
private readonly Func<MessageServiceType, IMessageService> _messageServiceResolver;
public MessagesController(Func<MessageServiceType, IMessageService> messageServiceResolver)
{
_messageServiceResolver = messageServiceResolver;
} public IActionResult Index()
{
var emailService = _messageServiceResolver(MessageServiceType.EmailService);
//use emailService ...
return View();
}