自定义成员资格提供程序的依赖注入

ala*_*irs 11 asp.net asp.net-mvc dependency-injection ninject ninject-2

我有一个ASP.NET MVC Web应用程序,它实现了自定义成员资格提供程序.自定义成员资格提供程序使用UserRepository其构造函数,该构造函数提供成员资格提供程序和NHibernate之间的接口.它UserRepository由Ninject IoC容器提供.

但是,显然,当.NET实例化提供程序时,这不起作用:无参数构造函数没有UserRepository而无法创建一个(UserRepository需要将NHibernate会话传递给它的构造函数),这意味着提供者无法访问其数据存储.如何解决对象依赖?

值得注意的是,这是一个已经使用Ninject进行改造的现有应用程序.以前我使用无参数构造函数,它们能够与参数化构造函数一起创建所需的依赖项,以帮助进行单元测试.

有什么想法,还是我把自己建在一个角落里?

Szt*_*upY 5

您可能希望保留无参数构造函数,即使用Ninject初始化所需的存储库.您可能希望使用公共服务定位器,因此您不需要在自定义提供程序中既没有对Ninject的引用也没有它的容器.似乎Ninject没有官方的CSL适配器实现,但写一个不应该很难(检查其他实现,如Windsor的),我确信在某处有一个非官方的实现.

  • Ninject于2010年1月推出了官方CSL适配器. (3认同)

Don*_*ald 5

来自Michael B.的正确答案:依赖注入和ASP.Net成员提供商

您可以通过以下方式获取存储库(或服务)注入:

public IRepository Repository { get { return DependencyResolver.Current.GetService(IRepository ); } }
Run Code Online (Sandbox Code Playgroud)