0

Я следую за MVC5-Dapper-Identity репо, чтобы иметь индивидуальную реализацию идентичности с dapper. моя проблема заключалась в том, что когда я регистрирую зависимости для контейнера iOC, в этом примере используется Ninject, но я использую Simple Injector. этот пример Зарегистрированы dependacies в belowИдентификация Индивидуальная реализация С простым инжектором

kernel.Bind<IConnectionFactory>().To<SqlConnectionFactory>() 
    .WithConstructorArgument("connectionString", 
     ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString); 
kernel.Bind<IUserRepository>().To<UserRepository>(); 
kernel.Bind<IUserStore<User>>().To<UserRepository>(); 
kernel.Bind<IUserLoginStore<User>>().To<UserRepository>(); 
kernel.Bind<IUserPasswordStore<User>>().To<UserRepository>(); 
kernel.Bind<IUserSecurityStampStore<User>>().To<UserRepository>(); 
kernel.Bind(typeof(UserManager<>)).ToSelf(); 

я попытался с простой форсункой, которая генерирует исключение для меня

container.Register<IUserRepository, UserRepository>(); 
container.Register<IUserStore<User>, UserRepository>(); 
container.Register<IUserLoginStore<User>, UserRepository>(); 
container.Register<IUserPasswordStore<User>, UserRepository>(); 
container.Register<IUserSecurityStampStore<User>, UserRepository>(); 
container.Register(typeof(UserManager<User>)); 

Как сделать выше реализацию с Simple Injector

Update

@Ric .Net Спасибо за ответ, но ваши роды реализации т.е это исключение

enter image description here

+0

Вы прочитали ссылку на документацию, предоставленную в исключении? – Steven

+0

ohh my bad спасибо за информацию – Gayan

ответ

3

генерирует исключение для меня?

Было бы лучше понять вопрос, если бы вы предоставили сообщение и stacktrace. В этом случае я думаю, что могу ответить, хотя и не знаю исключения. Я не могу быть уверенным и только догадываться ...

Пропуская регистрацию для IConnectionFactory и регистрации, сделанные для Ninject, не являются необходимыми, по крайней мере не из того, что я вижу.

Насколько я могу видеть из linked GitHub repo, только зависимость вашего кода приложения (контроллеры MVC) равна UserManager<User>.

Объекта граф, таким образом, выглядит следующим образом:

var accountController = 
    new AccountController(
     new UserManager(
      new UserRepository(
       new SqlConnectionFactory(
        connectionString)))); 

Так что вам нужна только регистрация для (кроме контроллеров MVC конечно):

  • UserManager => UserManager
  • IUserStore => UserRepository
  • IConnectionFactory => SqlConnectionFactory

Другие регистрации в этом месте не нужны.

Рассматривая реализацию классов из Dapper.Identity, используйте простой оператор SQL и не имеете никакого статуса. Поэтому время жизни может быть Singleton для всех компонентов Dapper.Identity. Для UserManager, который является частью Asp.Net Identity, я не совсем уверен, может ли это быть Singleton.

Необходимых регистрации являются:

var connectionFactory = new SqlConnectionFactory(connectionString); 
container.RegisterSingleton<IConnectionFactory>(connectionFactory); 
container.RegisterSingleton<IUserStore<User>, UserRepository>(); 
container.Register<UserManager<User>>(); 

Простого Инжектор не имеет поддержки вне коробки для .WithConstructorArgument беглого вызова API, а потому, что реализация может быть Singleton в любом случае, это не проблема на самом деле, вы просто создаете экземпляр в корне композиции и позволяете Simple Injector хранить этот уже сделанный экземпляр.

Если вам действительно нужны другие интерфейсы, которые нужно вводить где-то, способ регистрации этого в Simple Injector объясняется в документации here.

+0

Спасибо за ответ Пожалуйста, просмотрите обновленный вопрос – Gayan

+0

Я думаю, UserManager должен быть зарегистрирован как 'Lifestyle.Scoped'. – Steven