title: How do I inject dependency in owin startup class
body: <p>In my web api application I implemented OAuth2. On GrantResourceOwnerCredentials  of ApplicationOAuthProvider I am calling my custom membership service to login and get the token.The problem is I have to inject the membership service into ApplicationOAuthProvider in order to use the service but it didn't allow it due to owinStartup class which don't support the parameter constructor.How do I inject/use my membership service in GrantResourceOwnerCredentials  method.</p>
  
  <pre><code>  public class ApplicationOAuthProvider : OAuthAuthorizationServerProvider
    {
        private readonly string _publicClientId;
        private readonly IMembershipService _membershipService;
  
        public ApplicationOAuthProvider(string publicClientId, 
             IMembershipService membershipService)
        {
          if (publicClientId == null)
          {
              throw new ArgumentNullException("publicClientId");
          }
  
          _publicClientId = publicClientId;
          this._membershipService = membershipService;
        }
  
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
              AccountLogin LogCredentials = new AccountLogin();
              LogCredentials.UserName = context.UserName;
              LogCredentials.Password = context.Password;
  
              ProviderLoginResponse providerLoginResponse = 
                  _membershipService.UserLogin(LogCredentials);
              if (providerLoginResponse.LoginStatus != "Y")
              {
                  context.SetError("invalid_grant", "The user name or password 
                  is incorrect.");
                  return;
              }
  
              var claims = new List&lt;Claim&gt;()
              {
                      new Claim(ClaimTypes.Sid, Convert.ToString(1)),
                      new Claim(ClaimTypes.Name, providerLoginResponse.UserName),
                      new Claim(ClaimTypes.Email, providerLoginResponse.UserEmail)
              };
  
              ClaimsIdentity oAuthIdentity = new ClaimsIdentity(claims,
                      Startup.OAuthOptions.AuthenticationType);
  
              AuthenticationProperties properties = CreateProperties(context.UserName);
  
              AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
  
              context.Validated(ticket);
        }
    }
  </code></pre>
  
  <p>My owin startup class :</p>
  
  <pre><code> public partial class Startup
   {
      private readonly IMembershipService _membershipService;
  
      //This will cause a runtime error owin startup class only support parameterless constructor
      public Startup(IMembershipService membershipService)
      {
          this._membershipService = membershipService;
      }
  
      public void ConfigureAuth(IAppBuilder app)
      {
            OAuthOptions = new OAuthAuthorizationServerOptions
            {
              TokenEndpointPath = new PathString("/Token"),
  
              //Here passing the _membershipService to ApplicationOAuthProvider constructor
              Provider = new ApplicationOAuthProvider(PublicClientId,_membershipService ),
  
              AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
              AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
              // In production mode set AllowInsecureHttp = false
              AllowInsecureHttp = true
            };
      }
   }
  </code></pre>