В Visual Studio 2019 я создал проект веб-API ASP. NET. Я создал контроллер Web API 2. Я пошел по этой ссылке 1 и ссылке 2 , чтобы реализовать внедрение зависимостей с использованием Unity.
Я поделился кодом по ссылке 1, но он не работает. Я получаю ошибку в методе GetService(Type serviceType)
из UnityResolver
(который я скопировал из первой ссылки).
Ошибка:
Возникло исключение: 'Unity.ResolutionFailedException' в Unity .Container.dll
Я проверил это, используя точки останова. Он возвращает ноль, хотя контейнер не ноль.
Я так долго искал. Я не понимаю, где это неправильно, или я что-то не так сделал.
Я новичок в. NET Framework, а также в программировании. Любая помощь или совет приветствуется.
public object GetService(Type serviceType)
{
try
{
return container.Resolve<Type>();
//return container.Resolve(serviceType);
}
catch (ResolutionFailedException)
{
return null;
}
}
MyAPIController.cs
public class MyAPIController : ApiController
{
private IAgent agent;
public MyAPIController (IAgent _agent)
{
this.agent= _agent;
}
[HttpPost]
[Route("AgentService")]
public string GetAgentServices([FromBody] InputData inputData)
{
return "nothing";
}
}
WebApiConfig.cs
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var container = new UnityContainer();
container.RegisterType<IAgent, Agent>();
config.DependencyResolver = new UnityResolver(container);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Global.asax.cs
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}