0

我在 ASP.NET MVC 3 项目中使用 IOC 容器实现表单身份验证时遇到问题。我们已经在数据库中存储了我们的用户信息,并且有很多自定义属性。

我有一个注册到 IOC 容器的用户定义接口,用于开发目的。该接口提供给每个控制器,因此控制器具有当前用户信息。

在我删除 Application_Start 中的虚拟用户注册之前,这一切都很好

我收到此错误: 当前类型 ...CurrentUserInformation.IUserInformation 是一个接口,无法构造。您是否缺少类型映射?

我不想使用虚拟用户对象,因为我认为这不是最佳做法。

有人可以帮助我还是有更好的方法来进行这种自定义身份验证?

编辑添加了一些代码

基本控制器

public class BaseController : Controller
{
   private readonly IUserInformation _userInformation;
   public BaseController(IUserInformation userInformation)
   {
       _userInformation = userInformation
   }
}

从 Application_Start 调用的引导程序初始化

public static void Initialise()
{
    var container = BuildUnityContainer();
    DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}

private static IUnityContainer BuildUnityContainer()
{
    var container = new UnityContainer();

    //register all services en repositories

    //here i put my dummy user wich i want to remove
    container.RegisterInstance<IUserInformation>(
    new UserInformation
    {
        UserId = 1,
        ... 
    }); 


    return container;
}
4

1 回答 1

0

您可以使用 InjectionFactory:

container.RegisterType<IUserInformation, UserInformation>(

    // User information is destroyed when the request ends.
    //   You could use an HttpSessionLifetimeManager as well, if it fits your needs
    new HttpRequestLifetimeManager(), 


    new InjectionFactory(container => { 
          UserInformation userInfo = // TODO: build your userInformation from custom authentication
          return userInfo;
    })); 
于 2012-09-25T11:10:31.340 回答