相关疑难解决方法(0)

使用Simple Injector注册IAuthenticationManager

我正在为Simple Injector配置设置,我已将所有注册移动到OWIN管道.

现在问题是我有一个控制器AccountController,实际上参数为

public AccountController(
    AngularAppUserManager userManager, 
    AngularAppSignInManager signinManager, 
    IAuthenticationManager authenticationManager)
{
    this._userManager = userManager;
    this._signInManager = signinManager;
    this._authenticationManager = authenticationManager;
}
Run Code Online (Sandbox Code Playgroud)

现在我的Owin Pipeline配置看起来像这样

public void Configure(IAppBuilder app)
{
    _container = new Container();
    ConfigureOwinSecurity(app);
    ConfigureWebApi(app);
    ConfigureSimpleinjector(_container);

    app.Use(async (context, next) =>
    {
        _container.Register<IOwinContext>(() => context);
        await next();
    });

    _container.Register<IAuthenticationManager>(
        () => _container.GetInstance<IOwinContext>().Authentication);

    _container.Register<SignInManager<Users, Guid>, AngularAppSignInManager>();
}

private static void ConfigureOwinSecurity(IAppBuilder app)
{
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        CookieName = "AppNgCookie",
        //LoginPath = new PathString("/Account/Login")
    });
}

private static …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc simple-injector asp.net-identity asp.net-identity-2

12
推荐指数
2
解决办法
6335
查看次数

简单的Injector和默认的AccountContoller依赖性问题

我在Web Api项目中遇到Simple Injector问题.我的用户默认AccountController由VS生成.

public AccountController(ApplicationUserManager userManager,
    ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
Run Code Online (Sandbox Code Playgroud)

在我的配置文件中我注册:

var container = new Container();

// This is an extension method from the integration package.
container.RegisterWebApiFilterProvider(config);
container.RegisterWebApiControllers(config);

container.Register<IInitializeService, InitializeService>();
container.Register<IFolderRepository, FolderRepository>();
container.Register<IUserRepository, UserRepository>();
container.Register<ILogger, Logger>();

//Authentication Wrap
container.Register<IUserStore<User, Guid>, ApplicationUserStore>();
container.Register<IDataSerializer<AuthenticationTicket>, TicketSerializer>();
container.Register<ISecureDataFormat<AuthenticationTicket>,
    SecureDataFormat<AuthenticationTicket>>();
container.Register<IDataProtector>(
    () => new DpapiDataProtectionProvider().Create("ASP.NET Identity"));

container.Verify();

// 4. Register the container as MVC3 IDependencyResolver.
DependencyResolver.SetResolver(new SimpleInjectorWebApiDependencyResolver(container));
config.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)

我虽然Simple Injector足够聪明,可以处理所有依赖负责默认身份的构建,我不需要手动注册它们,但如果我不注册它们,我会得到例外.

仍然有例外:

SecureDataFormat类型的构造函数包含ITextEncoder类型的参数,其名称为"encoder",未注册.请确保ITextEncoder已在容器中注册,或更改SecureDataFormat的构造函数.

有没有办法自动处理?

c# authentication dependency-injection simple-injector owin

4
推荐指数
2
解决办法
2152
查看次数