Исключить динамическую загрузку репозитория из сборки
Я использую:
- EF 4.1
- MVC 3
- Ninject
- Ninject.Extensions.Conventions
- 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 при динамической загрузке из сборок? Должен ли я как-то ввести ядро?
1 ответ
Этот подход (отмечен ***
) отвечает и решает проблему (скопировано из комментария Джона Барретта):
kernel.Scan(a =>
{
a.FromAssembliesInPath(directoryInfo.FullName);
a.AutoLoadModules();
a.BindWithDefaultConventions();
a.InRequestScope(); // <-- ***
});