В новом приложении ASPNET MVC теперь вы получаете бесплатные льготы AspIdentity.
В вашем почтовом сервисе есть незащищенная небольшая строка.
Итак, я сделал:
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);
}
}
и теперь радость:
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);
...
когда Owin наносит удар, он вызывает Create on ApplicationUserManager в Startup.Auth.cs:
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
...
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
и поскольку я использую AutoFac в качестве моего контейнера IoC, в global.asax.cs
builder.RegisterType<My.Services.EmailService>().As<IEmailService>();
если метод Create является статическим, поэтому я получаю: _emailService
имеет значение null
Я посмотрел здесь: http://forums.asp.net/post/5293670.aspx и Как создать экземпляр UserManager и Использование Autofac для предоставления типов, экспортируемых статическим factory. но не повезло.
Если я изменил:
private My.Services.IEmailService _emailservice;
чтобы быть публичным, не статическим, я чувствую, что боги IoC трясутся головами, и я не могу построить ссылку на объект.