Implement Dependencies in User Membership

I have an ASP.NET MVC3 project where I want to use a custom membership provider. I also want to use Unity to solve my dependency injection.

This is the code from Global.asax:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        var container = new UnityContainer();
        container.RegisterType<IAuthentification, Authentification>();
        container.RegisterType<IRepository, Repository>();

        DependencyResolver.SetResolver(new UnityDependencyResolver(container));

    }

this is the code of my membership provider:

public class CustomMembershipProvider : MembershipProvider
{
   [Dependency]
   private IProveaRepository Repository { get; set; }

   public override bool ValidateUser(string username, string password)
    {
       .....
    }

The problem is that when I set a breakpoint on the ValidateUser method, I see that the Repository property is not initialized. But this design:

   [Dependency]
   private IProveaRepository Repository { get; set; }

for example, works great in controllers.

Does anyone know why this is so and what to do?

+5
source share
3 answers

. ( ). ​​

public class CustomMembershipProvider : MembershipProvider       
{
    private IProveaRepository repository;

    public CustomMembershipProvider() 
        : this (DependencyResolver.Current.GetService<IProveaRepository>())
    { }

    public CustomMembershipProvider(IProveaRepository repository)
    {
        this.repository= repository;
    }

    public override bool ValidateUser(string username, string password)
    {
        ...
    }
}

, Unity CustomMembershipProvider, Unity invested ( MVC3 DependencyResolver), .

CustomMembershipProvider, Unity , DependencyResolver.

+17

Unity IProveaRepository , :

  • .
  • CustomMembershipProvider ,

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, .

, , .

+1

, , Unity , , , "factory", , , . ( , , , ServiceFactory ...)

[Dependency] Unity BuildUp.

, , , , , , BuildUp

public class CustomMembershipProvider : MembershipProvider
{
   [Dependency]
   private IProveaRepository Repository { get; set; }

   public CustomMembershipProvider()
   {
     //contextual obtained container reference 
     unityContainer.BuildUp(this);
     .....
   }
   public override bool ValidateUser(string username, string password)
   {
       .....
   }

, .

0

All Articles