相关疑难解决方法(0)

使用Ninject将存储库注入自定义成员资格提供程序

我正在尝试使用MVC 3中的ninject将存储库注入自定义成员资格提供程序.

在MembershipProvider中,我尝试了以下内容:

[Inject]
public ICustomerRepository _customerRepository{ get; set; }
Run Code Online (Sandbox Code Playgroud)

[Inject]
public TUMembershipProvider(ICustomerRepository customerRepository)
{
    _customerRepository = customerRepository;
}
Run Code Online (Sandbox Code Playgroud)

在我的ninject模块中,我尝试了以下方法:

Bind<MembershipProvider>().ToConstant(Membership.Provider);
Run Code Online (Sandbox Code Playgroud)

以上都不是.

当我使用(在global.asa)

kernel.Inject(Membership.Provider);
Run Code Online (Sandbox Code Playgroud)

和...一起

[Inject]
public ICustomerRepository _customerRepository{ get; set; }
Run Code Online (Sandbox Code Playgroud)

它有效,但我没有生命周期管理,这将导致NHibernate的"ISession is open"错误,因为ISession是InRequestScope而存储库不是.

asp.net-mvc ninject-2 asp.net-mvc-3

18
推荐指数
2
解决办法
3871
查看次数

在MVC3应用程序中使用Ninject和自定义角色提供程序

我正在尝试在MVC3应用程序中使用自定义角色提供程序.我已经使用Ninject让会员提供商工作正常,但似乎无法让角色提供者工作.成员资格提供程序不需要无参数构造函数,但角色提供程序不需要.这是一些代码片段:

Web.config文件

<membership>
  <providers>
    <clear/>
    <add name="MyMembershipProvider" type="MyApp.Models.NHibernateMembershipProvider" 
         applicationName="myApp" />
  </providers>
</membership>

<roleManager enabled="true">
  <providers>
    <add name="MyRolesProvider" type="MyApp.Models.NHibernateRoleProvider"
         applicationName="myApp" />
  </providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud)

我有一个Ninject模块.

public class MyNinjectModule : NinjectModule
{
    public override void Load()
    {
        this.Bind<ISession>().ToMethod(
            x => MyApp.MvcApplication.SessionFactoryData.GetCurrentSession());

        // Respository
        this.Bind<IUserRepository>().To<UserRepository>();
        this.Bind<MembershipProvider>().To<NHibernateMembershipProvider>();
        this.Bind<RoleProvider>().To<NHibernateRoleProvider>();
    }
}
Run Code Online (Sandbox Code Playgroud)

自定义成员资格提供者

public class NHibernateMembershipProvider : MembershipProvider
{
    private IUserRepository _repo;

    public NHibernateMembershipProvider(IUserRepository repository)
    {
        _repo = repository;
    }
    ...
Run Code Online (Sandbox Code Playgroud)

角色提供者

public class NHibernateRoleProvider : RoleProvider
{

    private IUserRepository _repo;

    public NHibernateRoleProvider(IUserRepository repository)
    {
        _repo = …
Run Code Online (Sandbox Code Playgroud)

ninject roleprovider asp.net-mvc-3

9
推荐指数
1
解决办法
4059
查看次数

如何使用Ninject注入asp.net(mvc2)自定义成员资格提供程序?

好的,所以我几个小时都在研究这个问题.我在这里发现了几个帖子,但实际上没有解决问题.那么,让我再试一次......

我有一个使用Ninject和自定义成员资格提供程序的MVC2应用程序.

如果我尝试使用ctor注入提供程序,我会收到一个错误:'没有为此对象定义无参数构造函数.'

public class MyMembershipProvider : MembershipProvider
{
    IMyRepository _repository;

    public MyMembershipProvider(IMyRepository repository)
    {
        _repository = repository;
    }
Run Code Online (Sandbox Code Playgroud)

我也一直在玩工厂和Initialize(),但一切都空白了.

有什么想法/例子吗?

asp.net ninject custom-membershipprovider asp.net-mvc-2

4
推荐指数
1
解决办法
1765
查看次数

如何为MVC4和自定义成员资格配置Ninject?

根据这篇文章描述custom-membership-provider-with-repository-injection

我实现自定义成员资格提供注入.

定制会员提供商

using Ninject;

public class CustomMembershipProvider : MembershipProvider
{
        [Inject]
        public IUserRepository UserRepository { get; set; }

[...]
Run Code Online (Sandbox Code Playgroud)

自定义角色提供者

using Ninject;

public class CustomRoleProvider : RoleProvider
{
      [Inject]
      public IUserRoleRepository UserRoleRepository { get; set; }
[...]
Run Code Online (Sandbox Code Playgroud)

Web.Config中

<membership defaultProvider="CustomsMembershipProvider">
      <providers>
        <clear/>
        <add name="CustomsMembershipProvider" type="namespace.CustomsMembershipProvider"/>
      </providers>
</membership>
<roleManager enabled="true" defaultProvider="customRoleProvider">
      <providers>
        <clear/>
        <add name="customRoleProvider" type="namespace.customRoleProvider"/>
      </providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud)

现在在NinjectWebCommon中

private static IKernel CreateKernel()
{
      var kernel = new StandardKernel();
      kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
      kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

      RegisterServices(kernel); …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc entity-framework ninject custom-membershipprovider

2
推荐指数
1
解决办法
2463
查看次数