У меня TinyIoc счастливо работает в .net веб API.Я просто попытался добавить класс обслуживания, который использует System.Web.Http.HttpClient.Я явно регистрирую свой новый класс в контейнере, но внезапно у меня появляется стек ошибок времени выполнения при запуске приложения - tiny не может найти группу классов System.Web.Http.Вот первая такая ошибка ...
TinyIoC.TinyIoCResolutionException
HResult=0x80131500
Message=Unable to resolve type: System.Web.Http.Metadata.ModelMetadataProvider
Source=HubHacienda
StackTrace:
at TinyIoC.TinyIoCContainer.ResolveInternal(TypeRegistration registration, NamedParameterOverloads parameters, ResolveOptions options) in C:\Workspaces\HubHacienda_DEV\HubHacienda\TinyIoC.cs:line 3558
> HubHacienda.dll!TinyIoC.TinyIoCContainer.ResolveInternal(TinyIoC.TinyIoCContainer.TypeRegistration registration, TinyIoC.NamedParameterOverloads parameters, TinyIoC.ResolveOptions options) Line 3557 C#
HubHacienda.dll!TinyIoC.TinyIoCContainer.Resolve(System.Type resolveType) Line 1566 C#
HubHacienda.dll!HubHacienda.TinyIoCDependencyResolver.GetService(System.Type serviceType) Line 36 C#
[External Code]
HubHacienda.dll!HubHacienda.WebApiApplication.Application_Start() Line 1517:13 12/09/201817:13 12/09/201817:14 12/09/2018 C#
[External Code]
Вот это метод Application_Start () в global.asax
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
Вот метод Register () из моего класса WebApiConfig...
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
//config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"\d*" }
);
// sby
// http://www.rbwestmoreland.com/posts/inversion-of-control-in-asp-net-web-api/
var container = new TinyIoCContainer();
// Repositorys
container.Register<IJustifRepo, JustifRepo>();
container.Register<IReferringAppsRepo, ReferringAppsRepo>();
// then many more like this...
config.Formatters.XmlFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("multipart/form-data"));
config.DependencyResolver = new TinyIoCDependencyResolver(container);
}
Наконец, мой TinyIocDependencyResolver здесь ...
public class TinyIoCDependencyResolver : IDependencyResolver
{
private TinyIoCContainer _container;
public TinyIoCDependencyResolver(TinyIoCContainer container)
{
if (container == null)
throw new ArgumentNullException("container");
_container = container;
}
public IDependencyScope BeginScope()
{
if (_disposed)
throw new ObjectDisposedException("this", "This scope has already been disposed.");
return new TinyIoCDependencyResolver(_container.GetChildContainer());
}
public object GetService(Type serviceType)
{
if (_disposed)
throw new ObjectDisposedException("this", "This scope has already been disposed.");
try
{
return _container.Resolve(serviceType);
}
catch (TinyIoCResolutionException)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
if (_disposed)
throw new ObjectDisposedException("this", "This scope has already been disposed.");
try
{
return _container.ResolveAll(serviceType);
}
catch (TinyIoCResolutionException)
{
return Enumerable.Empty<object>();
}
}
#region IDisposable
bool _disposed;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (_disposed)
return;
if (disposing)
_container.Dispose();
_disposed = true;
}
#endregion IDisposable
}
Это что-нибудь значит для кого-то?HttpClient, вероятное дополнение, вызывающее мою боль, создается явно, а не DI.Почему я должен получать ошибки DI для классов, которые не являются моими?Целевой фреймворк для всех проектов - .net 4.5.