Ninject从程序集中动态加载存储库
本文关键字:加载 存储 动态 集中 程序 程序集 Ninject | 更新日期: 2023-09-27 17:57:52
我使用的是:
- EF 4.1
- MVC 3
- Ninject
- 九项目.扩展.约定
- Ninject.Web.Mvc
应用程序使用存储库模式。我的存储库可以这样注入:
kernel.Bind<ICategoryRepository>().To<CategoryRepository>().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>();
}
在运行时,存储库确实被注入,但由于某种原因,实体从未被保存——也许是因为存储库无法判断是否有更改?或者整个请求中没有维护工作单元?
我的问题是:从程序集动态加载时,如何实现"InRequestScope"?我必须以某种方式注入内核吗?
这种方法(标记为***
)回答并解决了问题(复制自@John Barrett的评论):
kernel.Scan(a =>
{
a.FromAssembliesInPath(directoryInfo.FullName);
a.AutoLoadModules();
a.BindWithDefaultConventions();
a.InRequestScope(); // <-- ***
});