Исключить динамическую загрузку репозитория из сборки - PullRequest
1 голос
/ 26 мая 2011

Я использую:

  • 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 Ответ

2 голосов
/ 08 августа 2011

Этот подход (отмеченный ***) отвечает и решает проблему (скопировано из комментария @Джона Барретта):

kernel.Scan(a =>
  {
    a.FromAssembliesInPath(directoryInfo.FullName);
    a.AutoLoadModules();
    a.BindWithDefaultConventions();
    a.InRequestScope();  // <-- ***
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...