디 컨테이너입니다 로빈스트라토프 때 사용하는 방법

39 의 it& 웹 API 2 프로젝트.

When I DI 닌젝트 구현하십시오 사용하여, 나는 attaboy 오류 메시지가

& # 39, 유형의 컨트롤러거 만들려는 오류가 발생했습니다 TokenController& # 39;. 는 공공 구성자를 파라메트리스 컨트롤러거 있는지 확인합니다.

[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);
    }
}

난 '때 추가 키 추가 = &quot owin:AutomaticAppStartup&quot <;; 값 = &quot false"; 웹스콘피그 '을 /&gt.

닌젝트 작동합니다,

    • 스타르투피오우세베어러루티언스트라클레스토켄포르마 null 로 되어 있지만

디 컨테이너입니다 사용하는 방법을 통해 로빈?

  • 업데이트 *

이데펜덴시어솔버 구현하십시오 사용하여 다음과 같이 확인자 바바피 상관 관계

public void ConfigureWebApi(IAppBuilder app)
{
    HttpConfiguration config = new HttpConfiguration();

    config.DependencyResolver = new NinjectDependencyResolver(NinjectWebCommon.CreateKernel());

    app.UseWebApi(config);
}

[닌젝트데펜덴시어솔버] (http://www.peterprovost.org/blog/2012/06/19/adding-ninject-to-web-api)

간단히 인젝터 사례

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);
}

[심프라인제스웨바피데펜덴시어솔버] (http://simpleinjector.codeplex.com/wikipage? title = Web% 20api% 20integration)

질문에 대한 의견 (4)
해결책

살펴보도록 할 수 있습니다 (이 블로그 포스트] (http://damienbod.wordpress.com/2013/10/01/self-host-webapi-with-owin-and-unity/).

그러나 최종 최대 it& # 39 의 힘을 사용하여 같은 것이 있다.

기본적으로 list. 바바피 종속성 해결. 이 모든 것이 제대로 매핑되었습니다 smartupdate 문제가 없어야 합니다.

만약 설정 후 디 너회가 아직 문제가 OAuth 토큰인지, 알려주세요.

건배

해설 (1)

업데이트

이 덕분에 이제 더 간단하지는 누제 패키지 닌ject.웹스웨바피트로이뉴스트 :

Startup.cs

using Ninject;
using Ninject.Web.Common.OwinHost;
using Ninject.Web.WebApi.OwinHost;
using Owin;
using System.Web.Http;

namespace Xxx
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            var config = new HttpConfiguration();
            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute("DefaultApi", "myservice/{controller}/{id}", new { id = RouteParameter.Optional });

            app.UseNinjectMiddleware(CreateKernel);
            app.UseNinjectWebApi(config);
        }
    }
    public static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();

        kernel.Bind().To();
        return kernel;
    }
}

이에 따라 내가 wiki 를 업데이트했는지.

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

해설 (1)

우리가 사용하는 표준 닌젝트. 설치된 누제 mvc5 패키지

PM&gt. 패키지 설치 닌젝트. MVC5

하나님은 우리의 바인딩 구성하시겠습니까 같은 합니다.

kernel.Bind()
    .To()
    .InRequestScope();

kernel.Bind()
    .To()
    .InRequestScope();

kernel.Bind()
    .To()
    .InRequestScope()
    .WithConstructorArgument("ApplicationName");

kernel.Bind().ToSelf().InRequestScope()
    .WithPropertyValue("UserTokenProvider",
        new DataProtectorTokenProvider(
            kernel.Get().Create("EmailConfirmation")
            ));

사용자 모델 정의한 알마예요 종속적임 조정해야 할 수 있습니다. 예를 들어 사용자가 바인딩하면 같은 항목을 저장할 수 있습니다.

kernel.Bind()
      .To().InRequestScope();

즉, 또한 모든 사용자 설정 관리자 암호를 사용자 관리자 구성자를 필요한 정책을 설정할 수 있습니다.

이전에는 이 만들 수 있는 방법을 찾을 수 있는 이 샘플링합니다 않아도 됩니다. 또한 없앨 수 있습니다) 로 처리할 수 있는 로빈 프레젠테이션이든 컨텍스트로 페이징됩니다 닌젝트 해결안에서는 당신꺼에요.

해설 (2)