0

Je suis MVC5-Dapper-Identity repo pour avoir une implémentation personnalisée de l'identité avec dapper. Mon problème était quand j'inscris des dépendances au conteneur d'iOC cet exemple utilise Ninject mais j'utilise Simple Injector. cet exemple enregistré leurs dependacies comme belowIdentité Mise en œuvre personnalisée avec Simple Injector

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(); 

j'ai essayé avec Injector simple qui génère exception pour moi

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>)); 

Comment faire la mise en œuvre ci-dessus avec Injector simple

Mise à jour

@Ric .Net Merci pour la réponse mais votre genre d'implémentation cette exception te

enter image description here

+0

Avez-vous lu le lien de la documentation fourni dans l'exception? – Steven

+0

ohh mon mauvais merci pour l'info – Gayan

Répondre

3

génère exception pour moi?

Il serait préférable de comprendre la question si vous avez fourni le message et la pile. Dans ce cas, je pense que je peux répondre, bien que sans connaître l'exception, je ne peux pas être sûr et seulement deviner ...

Vous avez manqué l'enregistrement pour IConnectionFactory et les enregistrements faits pour Ninject ne sont pas tous nécessaires, au moins pas de ce que je vois.

Pour autant que je puisse voir à partir de linked GitHub repo la seule dépendance dans votre code d'application (les contrôleurs MVC) est UserManager<User>.

Le graphique d'objet ressemble donc comme suit:

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

Donc, vous ne devez inscriptions (en dehors des contrôleurs Mvc ofcourse):

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

Les autres enregistrements ne sont pas nécessaires à ce stade.

En regardant l'implémentation, les classes de Dapper.Identity utilisent une instruction SQL claire et n'ont aucun statut. Par conséquent, la durée de vie peut être Singleton pour tous les composants Dapper.Identity. Pour le UserManager, qui fait partie de Asp.Net Identity, je ne suis pas complètement sûr si cela peut être un Singleton.

Les inscriptions nécessaires sont:

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

Injector simple n'a pas hors-the-box pour .WithConstructorArgument appel api fluide, mais parce que la mise en œuvre peut être un Singleton de toute façon, ce n'est pas un problème du tout, vous créez simplement une instance dans la racine de la composition et laissez Simple Injector stocker cette instance déjà créée.

Si vous avez en effet besoin des autres interfaces à injecter quelque part, la manière d'enregistrer cela avec Simple Injector est expliquée dans la documentation here.

+0

Merci pour la réponse S'il vous plaît voir la question mise à jour – Gayan

+0

Je pense que UserManager devrait être enregistré comme 'Lifestyle.Scoped'. – Steven