In una nuova applicazione ASPNET MVC ora si ottengono i vantaggi di AspIdentity gratuitamente.AspIdentiy ApplicationUserManager è statico, come estendere in modo che partecipi al mio framework IoC?
C'è una piccola linea innocua "inserisci qui il tuo servizio email".
Così ho fatto:
public class EmailService : IIdentityMessageService
{
private static My.Services.IEmailService _emailservice;
public EmailService(Insolvency.Services.IEmailService emailservice)
{
_emailservice = emailservice;
}
public Task SendAsync(IdentityMessage message)
{
_emailservice.SendEmail(message);
return Task.FromResult(0);
}
}
e ora la gioia:
public class ApplicationUserManager : UserManager<ApplicationUser>
{
private My.Services.IEmailService _emailservice;
public ApplicationUserManager(IUserStore<ApplicationUser> store, My.Services.IEmailService emailservice): base(store)
{
_emailservice = emailservice;
}
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()), _emailservice);
...
come calci Owin in esso chiama il Crea l'ApplicationUserManager in Startup.Auth.cs:
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
...
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
e come sto utilizzando AutoFac come contenitore IoC, in global.asa x.cs
builder.RegisterType<My.Services.EmailService>().As<IEmailService>();
se il metodo Create è statico in modo da ottenere:
_emailService
è nullo
Ho guardato qui: http://forums.asp.net/post/5293670.aspx e How do i create an instance of UserManager e Using Autofac to provide types exported by static factory. ma senza fortuna.
Se cambio:
private My.Services.IEmailService _emailservice;
per essere pubblico non statico Sento dei IoC scuotendo la testa, e non posso costruire 'riferimento a un oggetto richiesto'
grazie. Proverò a convertire tra Unity e Autofac. – OzBob
Attualmente il compilatore dà errore: ... il tipo 'ApplicationUser' non può essere utilizzato come parametro di tipo 'TUser' nel tipo generico o nel metodo 'Microsoft.AspNet.Identity.EmailTokenProvider'. Non esiste alcuna conversione implicita dei riferimenti da "ApplicationUser" a "Microsoft.AspNet.Identity.IUser ". Potresti fornire la tua fonte per IdentityModels.cs –
OzBob
fatto. fammi sapere se aiuta – free4ride