C# Ninject从程序集动态加载存储库

C# Ninject从程序集动态加载存储库,c#,repository-pattern,ninject-2,C#,Repository Pattern,Ninject 2,我正在使用: 环境足迹4.1 MVC 3 尼尼特 Ninject.Extensions.Conventions Ninject.Web.Mvc 应用程序使用存储库模式。 我的存储库可以这样注入: kernel.Bind<ICategoryRepository>().To<CategoryRepository>().InRequestScope(); kernel.Bind().To().InRequestScope(); 而且一切都很好:——) 但我还没有尝试从g

我正在使用:

  • 环境足迹4.1
  • MVC 3
  • 尼尼特
  • Ninject.Extensions.Conventions
  • Ninject.Web.Mvc
应用程序使用存储库模式。 我的存储库可以这样注入:

kernel.Bind<ICategoryRepository>().To<CategoryRepository>().InRequestScope();
kernel.Bind().To().InRequestScope();
而且一切都很好:——)

但我还没有尝试从global.asax.cs中这样的组件中进一步动态注入

private static void LoadFromAssemblies(IKernel kernel)
{
    Uri uri = new Uri(
      Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) +
      @"\Extensions");
    DirectoryInfo directoryInfo = new DirectoryInfo(uri.LocalPath);

    var scanner = new AssemblyScanner();

    scanner.FromAssembliesInPath(directoryInfo.FullName);
    scanner.BindWith<DefaultBindingGenerator>();
    kernel.Scan(scanner);

    //var foo = kernel.Get<ICategoryRepository>();
}
私有静态void loadfromsassemblies(IKernel内核)
{
Uri=新Uri(
Path.GetDirectoryName(Assembly.getExecutionGassembly().GetName().CodeBase)+
@“\Extensions”);
DirectoryInfo DirectoryInfo=新的DirectoryInfo(uri.LocalPath);
var scanner=新的AssemblyScanner();
scanner.fromsassembliesinpath(directoryInfo.FullName);
scanner.BindWith();
内核扫描(扫描器);
//var foo=kernel.Get();
}
在运行时,存储库确实会被注入,但由于某种原因,该实体从未被保存—可能是因为存储库无法判断是否有更改?或者在整个请求中没有维护工作单元

我的问题是:当从程序集动态加载时,如何实现“InRequestScope”?我必须以某种方式注入内核吗?

这种方法(标记为
***
)回答并解决了问题(摘自@John Barrett的评论):

kernel.Scan(a=>
{
a、 fromsassembliesinpath(directoryInfo.FullName);
a、 自体模块();
a、 BindWithDefaultConventions();
a、 InRequestScope();//好的,我找到了这篇文章:这篇文章回答并解决了我的问题。kernel.Scan(a=>{a.fromsassembliesinpath(directoryInfo.FullName);a.AutoLoadModules();a.BindWithDefaultConventions();a.*InRequestScope**();});
kernel.Scan(a =>
  {
    a.FromAssembliesInPath(directoryInfo.FullName);
    a.AutoLoadModules();
    a.BindWithDefaultConventions();
    a.InRequestScope();  // <-- ***
  });