У меня есть простое приложение, которое использует класс OWIN-Startup для настройки. НО, я не могу заставить его работать! Вот моя конфигурация:Использование DryIOC в ASP.NET WebAPI на основе OWIN не работает
public void Configuration(IAppBuilder appBuilder) {
var httpConfiguration = new HttpConfiguration();
httpConfiguration.Routes.MapHttpRoute(
name: "default_api_versioned_by_areas",
routeTemplate: "api/{area}/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var container = new Container();
// registering my services. They're all good....
container.WithWebApi(
httpConfiguration, new[] {GetType().Assembly});
container.RegisterWebApiControllers(
httpConfiguration, new[] { GetType().Assembly });
appBuilder.UseDryIocWebApi(httpConfiguration)
.UseDryIocOwinMiddleware(container);
appBuilder.UseWebApi(httpConfiguration);
// I can resolve other services:
var s = container.Resolve<MyOtherService>();
// but I cannot resolve controllers:
var c = container.Resolve<ContentController>();
}
Как вы можете видеть, MyOtherService
разрешима; Но не ContentController
. Кроме того, когда я запрашиваю API, я получаю эту ошибку:
An error occurred when trying to create a controller of type 'ContentController'. Make sure that the controller has a parameterless public constructor.
Googling не помогает. Можете ли вы помочь мне разобраться, как запустить приложение?
UPDATE:
кажется контроллеры не зарегистрированных на-все. Когда я пытаюсь разрешить ContentController
- который имеет значение по умолчанию ctor
с не-зависимостью - я получаю эту ошибку:
// code:
var c = container.Resolve<ContentController>();
// exception:
An exception of type 'DryIoc.ContainerException' occurred in DryIoc.dll but was not handled in user code
Additional information: Unable to resolve MyProject.Areas.Alpha.Controllers.ContentController
Where CurrentScope:
and ResolutionScope:
and Found registrations:
without matching scope DefaultKey.Of(0),{ID=33, ImplType=MyProject.Areas.Alpha.Controllers.ContentController, Reuse=CurrentScopeReuse {Name="WebRequestScopeName", Lifespan=100}}}
without matching scope DefaultKey.Of(1),{ID=37, ImplType=MyProject.Areas.Alpha.Controllers.ContentController, Reuse=CurrentScopeReuse {Name="WebRequestScopeName", Lifespan=100}}}
Это стандартный ответ, когда ошибка не может разрешить контроллер. Невозможно разрешить одну из зависимостей контроллера. Убедитесь, что все зависимости контроллера могут быть разрешены контейнером IoC. – Nkosi
Ошибка от обновления сообщает, что есть две регистрации ContentController. Кроме того, вы не разрешаете в области запроса - ошибка говорит о соответствующей области. Просто для теста 'var scope = container.OpenScope (Reuse.WebRequestScopeName); scope.Resolve
dadhi
@ dadhi там были две регистрации' ContentController'. Пожалуйста, напишите свой комментарий в качестве ответа. Я вызывал 'appBuilder.UseWebApi (httpConfiguration)' и 'appBuilder.UseDryIocWebApi (httpConfiguration)' оба. Удаление второго разрешило проблему –