EFBootstrapper Ninject to Unity EFBootStrapper - PullRequest
1 голос
/ 12 марта 2012

Я следую одному примеру из http://kazimanzurrashid.com/posts/entity-framework-code-first-bootstrapping

В этом посте Кази использовал Ninject, но в моем случае я выбрал Unity в качестве контейнера IOC.

Я затрудняюсь перевести следующий код модуля niject в код Unity. Вся помощь будет оценена.

public class DataAccessModule : NinjectModule
{
    public override void Load()
    {
        Bind<DataContextFactory>()
            .ToMethod(c => new DataContextFactory("DefaultConnection"))
            .InRequestScope();

        Bind<DataContext>()
            .ToMethod(c => c.Kernel.Get<DataContextFactory>().GetContext());

        Bind(typeof(IRepository<>)).To(typeof(Repository<>));
        Bind<UnitOfWork>().ToSelf();
    }
}

Заранее спасибо!

1 Ответ

1 голос
/ 13 марта 2012

Попробуйте это для регистрации

public class DataAccessModule : UnityContainerExtension
{
  protected override void Initialize()
  {
    this.Container.RegisterType<DataContextFactory>(new HttpContextLifetimeManager(), 
      new InjectionFactory(c => new DataContextFactory("DefaultConnection")));
    this.Container.RegisterType<DataContext>(
      new InjectionFactory(c => c.Resolve<DataContextFactory>().GetContext()));
    this.Container.RegisterType(typeof(IRepository<>), typeof(Repository<>));
  }
}

Образец для HttpContextLifetimeManager можно найти здесь .

Вам необходимо добавить DataAccessModule в свой контейнер в корне композиции.

container.AddNewExtension<DataAccessModule>();
...