我在使用Xamarin.Forms处理依赖注入方面有一点经验,但在WebApi中没有,我想要的是通过我的接口发送数据并在我的类中执行,实现该接口,这就是我所拥有的:
public interface IRepository
{
IHttpActionResult SendContext(user user);
IHttpActionResult GetContextData(int id);
}
public class ContextGoneBase : ApiController,IRepository
{
public IHttpActionResult GetContextData(int id)
{
try
{
using (var context = new GoneContext())
{
var result = context.user.Where(a => a.id_user == id).Select(w =>
new { w.user_name, w.cellphone_number, w.user_kind, w.CEP, w.area.area_name, w.district, w.city.city_name, w.city.state.state_name });
var list = result.ToList();
if (list != null)
{
return Ok(list);
}
else
{
return BadRequest();
}
}
}
catch (Exception)
{
return BadRequest();
}
}
在我的控制器里面,我试图做那样的事情:
[Route("86538505")]
public IHttpActionResult GetData(int id, IRepository repo)
{
this._repo = repo;
var result = _repo.GetContextData(id);
return result;
}
但是,它失败了!谢谢!
答案 0 :(得分:0)
您应该将IRepository作为参数传递给构造函数 将IRepository类型的字段_repo设置为传递的参数值。
public ContextGoneBase (IRepository repository){ //Constructor
_repo = repository;
}
。然后使用像Unity这样的IOC容器来使用正确的参数实例化控制器。例如,在使用nuget安装Unity之后,您将拥有一个UnityConfig类文件,您可以在那里注册您的存储库类型。例如,如果您的存储库是存储库类型
public static class UnityConfig
{
public static void RegisterComponents()
{
// register all your components with the container here
// it is NOT necessary to register your controllers
// e.g. container.RegisterType<ITestService, TestService>();
var container = new UnityContainer();
container.RegisterType<IRepository,Repository>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}
现在在Global.asax中调用此方法:
protected void Application_Start()
{
UnityConfig.RegisterComponents();
}