【发布时间】:2012-05-22 11:36:14
【问题描述】:
我正在开发一个更大规模的 MVC 应用程序,并且一直在尝试将 DI 与 Ninject 一起使用。我有以下项目:
Core - 类库(包含自定义成员资格提供程序) 域 - 类库(包含访问 IUserRepository 等数据的接口和 EF) WebUI - MVC 3 项目
我已在我的 WebUI 的 App_Start 容器内的 Ninject 启动中将 IUserRepository 绑定到 UserRepository。
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IUserRepository>().To<UserRepository>();
}
}
但是,我想将客户成员资格提供程序中的 UserRepository 与核心类库一起使用...
public class MyMembershipProvider : MembershipProvider
{
private IUserRepository userRepository;
public MyMembershipProvider (IUserRepository repository)
{
this.userRepository = repository;
}
public override string ApplicationName
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
// Rest of methods....
但是这失败了,因为我的 Ninject 启动是在 WebUI 项目中,并且可能对类库一无所知。有没有办法让它也为这些类库注入依赖项?
或者我应该寻找一种不同的方式来对这些及其依赖项进行编码?
【问题讨论】:
-
我相信这已经得到了回答:stackoverflow.com/a/7924087/335545
标签: class dependency-injection ninject