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(); // <-- ***
});