0

ASP.NETMVC3プロジェクトでIOCコンテナーを使用してフォーム認証を実装する際に問題が発生しました。ユーザー情報をデータベースに保存し、多くのカスタムプロパティを持っています。

開発目的でIOCコンテナに登録されたユーザー定義のインターフェイスがあります。このインターフェースは各コントローラーに与えられるので、コントローラーは現在のユーザー情報を持っています。

これは、Application_Startでダミーのユーザー登録を削除するまで正常に機能します

このエラーが表示されます: 現在のタイプ... CurrentUserInformation.IUserInformationはインターフェースであり、構築できません。タイプマッピングがありませんか?

これはベストプラクティスではないと思うので、ダミーのユーザーオブジェクトを操作したくありません。

誰かが私を助けてくれますか、それともこのカスタム認証を行うためのより良い方法がありますか?

編集はいくつかのコードを追加しました

BaseController

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

Application_Startから呼び出されたBootstrapperInitialize

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 に答える