Дополнительно
Как использовать контейнер для OwinStartup
Он'ы проект веб-API 2.
Когда я реализую Ди с помощью Ninject, я получил сообщение об ошибке
Произошла ошибка при попытке создать контроллер типа 'TokenController'. Убедитесь, что контроллер имеет общедоступного конструктора без параметров.
[assembly: OwinStartup(typeof(Web.Startup))]
namespace Web
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
ConfigureWebApi(app);
}
}
}
public class TokenController : ApiController
{
private IUserService _userService;
public TokenController(IUserService userService)
{
this._userService = userService;
}
[Route("api/Token")]
public HttpResponseMessage PostToken(UserViewModel model)
{
if (_userService.ValidateUser(model.Account, model.Password))
{
ClaimsIdentity identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, model.Account));
AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
var currentUtc = new SystemClock().UtcNow;
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30));
return new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ObjectContent<object>(new
{
UserName = model.Account,
AccessToken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket)
}, Configuration.Formatters.JsonFormatter)
};
}
return new HttpResponseMessage(HttpStatusCode.BadRequest);
}
}
Когда я добавить <добавить ключ="в долг:AutomaticAppStartup на" значение=на"ложные" и />
в web.конфиг
Ninject работает отлично, но стартап.OAuthBearerOptions.AccessTokenFormat становится равным null
Как использовать контейнер с долг?
Обновление
Осуществлять IDependencyResolver и использовать решатель зависимостей веб-API, как показано ниже
public void ConfigureWebApi(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
config.DependencyResolver = new NinjectDependencyResolver(NinjectWebCommon.CreateKernel());
app.UseWebApi(config);
}
В простом случае инжектор
public void ConfigureWebApi(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
var container = new Container();
container.Register<IUserService, UserService>();
config.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);
app.UseWebApi(config);
}
63
3
Вы, возможно, захотите взглянуть на этот блог](http://damienbod.wordpress.com/2013/10/01/self-host-webapi-with-owin-and-unity/).
Это's используя единства, но это должно закончиться-будет то же самое.
В принципе, использовать веб-API решатель зависимостей. Убедитесь, что все отображается правильно и все будет хорошо.
Если после настройки Ди вы все еще имеете проблему с вашим маркера OAuth-авторизации, дайте мне знать.
Ура
Обновление
Теперь это более прямо вперед, благодаря пакет NuGet Ninject.Веб.Веб-API.OwinHost:
Запуска.в CS
Я обновил соответственно Вики.
https://github.com/ninject/Ninject.Web.Common/wiki/Setting-up-a-OWIN-WebApi-application
Все три варианта хостинга.
https://github.com/ninject/Ninject.Web.WebApi/wiki/Setting-up-an-mvc-webapi-application
Мы используем стандартный ninject.Установлен пакет MVC5 с NuGet
ТЧ> установка пакета ninject.MVC5
Затем мы настроим привязки вроде так.
Вам может потребоваться настроить зависит от того, сколько вы настраивали вашу модель пользователя. Например, привязка пользователей магазина может быть что-то подобное.
Также любая настройка в яслях пользователей вы требуете, т. е. политики паролей можно настроить в конструкторе менеджер пользователей.
Ранее этот может быть найден в создании метода в образце, вы больше не нуждаетесь в этом. также теперь вы можете избавиться от OWIN в контекстном звонки, как ninject будет обрабатывать разрешение для вас.