Мы используем Unity.WebAPI для реализации внедрения зависимостей в Web API.
Я бы хотел передать Token
в качестве параметра конструктора в класс реализации, а не в качестве свойства?
Также, пожалуйста, помогите мне улучшить приведенную ниже архитектуру.
UnityConfig
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType<ICustomer, Customer>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}
BaseController
public class BaseController : ApiController
{
protected string Token;
public BaseController()
{
if (System.Web.HttpContext.Current.Request.Headers["Authorization"] != null)
{
Token = System.Web.HttpContext.Current.Request.Headers["Authorization"];
}
}
}
CustomerController
public class CustomerController : BaseController
{
ICustomer CustomerRepository;
public CustomerController(ICustomer customerRepository)
{
CustomerRepository = customerRepository;
CustomerRepository.Token = base.Token;
}
[HttpGet]
[Route(UrlConstants.GETCUSTOMERDETAILS)]
public IHttpActionResult GetCustomerDetails(int customerId)
{
return Content(HttpStatusCode.OK, CustomerRepository.GetCustomerDetails(customerId));
}
}
Интерфейс
public interface IBase
{
string Token { get; set; }
}
public interface ICustomer : IBase
{
CustomerDetails GetCustomerDetails(int customerId);
}
Реализация
public class Customer : ICustomer
{
public string Token { get; set; }
public CustomerDetails GetCustomerDetails(int customerId)
{
// Use the Token here
}
}