簡體   English   中英

如何使用Autofac注入asp.net mvc3自定義成員資格提供程序?

[英]How can you inject an asp.net mvc3 custom membership provider using Autofac?

我有一個使用Autofac和自定義成員資格提供程序的MVC3應用程序。

如果我嘗試使用ctor注入提供程序,我會收到一個錯誤:'沒有為此對象定義無參數構造函數。'

public class MyMemberShipProvider : MembershipProvider
    {

        IUserRepository userRepository;

  public MyMemberShipProvider(IUserRepository userRepository)
        {
            this.userRepository = userRepository;

        }

您無法注入內置提供程序(成員資格/角色)。 您可以將MVC 3 DependencyResolver與Autofac一起使用。

一個簡單的例子......

public override bool ValidateUser(string username, string password)
{
    var userRepo = DependencyResolver.Current.GetService<IUserRepository>();
    return userRepo.ValidateUser(username, password);
}

避免在應用程序代碼中解析(驗證用戶等),因為這是服務定位器反模式。 您只想在“膠水”代碼/低級代碼中解決。

以下是針對windsor的,但可以輕松調整實施方案。 這是一個針對城堡溫莎的概述,但實施應該是類似的。 它有點干凈,因為這在GetProvider調用中解決 - 這里是'粘合'代碼,因此避免了實際成員函數中的服務定位器反模式使用(例如ValidateUser)

http://bugsquash.blogspot.com/2010/11/windsor-managed-membershipproviders.html

這是因為你也應該注入你的userRepository。 就像是:

protected override void Load(ContainerBuilder builder)
{
    builder.RegisterType<UserRepository>().As<IUserReposotory>();
    builder.RegisterType<MyMembershipProvider>();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM