У меня тоже были огромные проблемы с этим. Что-то о провайдерах, которые плохо работают с Ninject. Я никогда не понимал это. Я решил исправить это, а не делать инъекции. Я абстрагировал все в Сервис и сделал привязки Ninject к этому классу сервиса. В итоге я получил Службу, использующую жесткий код моего провайдера членства в Entity Framework, и если мне понадобится другой провайдер, мне нужно будет внедрить другую услугу, в которой этот провайдер жестко закодирован.
Инъекция с простым классом обслуживания работает, но не с прямой привязкой ToConstant()
к провайдеру.
public class AccountMembershipService : IMembershipService
{
private readonly MembershipProvider _provider;
private readonly IAccountRepository _accountRepository;
private readonly IFirmsRepository _firmsRepository;
private readonly IRepository<Client> _clientsRepository;
public AccountMembershipService(IAccountRepository accountRepository, IFirmsRepository firmRepository,
IRepository<Client> clientsRepository)
{
_provider = System.Web.Security.Membership.Providers["EfMembershipProvider"];
_accountRepository = accountRepository;
_firmsRepository = firmRepository;
_clientsRepository = clientsRepository;
}
...
Global.asax.cs
Bind<IFormsAuthenticationService>().To<FormsAuthenticationService>();
Bind<IMembershipService>().To<AccountMembershipService>();
Bind<IAccountRepository>().To<EntityFrameworkAccountProvider>();
// never worked
//Bind<MembershipProvider>().ToConstant(System.Web.Security.Membership.Providers["EfMembershipProvider"]);