2015-08-17 3 views
0

Я использую Ninject в качестве IoC, и я следую учебному пособию, чтобы преобразовать методы по умолчанию для безопасности ASP.NET Owin, чтобы следовать шаблону инъекции зависимостей.Зависимость от зависимостей от предыдущего связывания с использованием Ninject

контекста моей базы данных, MongoDB в данном случае, это переплетен так:

kernel.Bind<IMongoContext>().To<MongoContext>().InSingletonScope(); 

В настоящее время мой модуль безопасности (инъекции не зависимость), как это:

var users = MongoContext.Create().GetCollection<ApplicationUser>(); 
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(users)); 

Я хотел бы для решения UserStore, как я видел в этом единстве:

container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(
     new InjectionConstructor(typeof(ApplicationDbContext))); 

Ну, приведенный выше код использует Entity Fr В моем случае это будет похоже на мой MongoContext.

Я думаю, что было бы что-тем похожее на

kernel.Bind<IUserStore>.To<UserStore>().WithConstructorArgument(/*some extra option to pass a resolve of my MongoContext*/) 

Так что мне нужно знать, как пройти разрешённый MongoContext к UserStore затруднительному.

EDIT: IUserStore и UserStore являются системными классами, а не моими.

+0

У вас есть вопрос? – NightOwl888

+0

Не можете ли вы просто создать свой конструктор 'UserStore', который вводит« IMongoContext »? Это означало бы, что 'WithConstructorArgument()' не понадобится ... – timothyclifford

+0

@ NightOwl888 Обновлено –

ответ

2

После нескольких попыток, я думаю, я нашел элегантное решение:

kernel.Bind<IUserStore<ApplicationUser>>().To<IUserStore<ApplicationUser>>() 
    .WithConstructorArgument(kernel.Get<IMongoContext>().GetCollection<ApplicationUser>());