Unity не может внедрить экземпляр IProveaRepository в ваш пользовательский поставщик членства, потому что:
- Вы не настроили его для этого
- CustomMembershipProvider не разрешается с помощью Unity, поэтому он не имеет контроля наддобавив в него зависимости
Если вы используете свой класс priovider членства в своем коде, вы можете сделать следующее:
Попробуйте обернуть свой customMembershipProvider в абстракцию, например IMembershipProvider, котораяимеет подпись только для методов, которые вы используете.Результат выглядит так:
public class CustomMembershipProvider : MembershipProvider, IMembershipProvider
Тогда вы можете зарегистрировать его в единстве:
container.RegisterType<IMembershipProvider, CustomMembershipProvider>(new InjectionProperty(new ResolvedParameter<IProveaRepository>()));
Тогда ограничение заключается в том, чтобы передать зависимость в вашем контроллере следующим образом:
public class HomeController : Controller
{
private IMembershipProvider _membershipprovider;
public HomeController(IMembershipProvider membershipProvider)
{
_membershipProvider = membershipProvider
}
// some actions
}
Но было бы лучше, если бы пользователь не вводил инъекцию свойства, а конструктор так:
public class CustomMembershipProvider : MembershipProvider
{
private IProveaRepository Repository { get; set; }
public CustomMembershipProvider(IProveaRepository proveaRepository)
{
Repository = proveaRepository
}
public override bool ValidateUser(string username, string password)
{
.....
}
Я так понимаю и буду делать это.Но, возможно, есть лучший подход, или я игнорирую некоторые из Unity API, которые могли бы помочь в его достижении.
В любом случае, я надеюсь, что это поможет.