Base solution for your next web application
Open Closed

Problem with testing due to ChatUserStateWatcher initialization #9409


User avatar
0
michael.pear created

I'm running into an issue with the inclusion of resolution and initialization of ChatUserStateWatcher in the CoreModule. I am trying to construct tests for services I am adding for my application against a database that I am maintaining as a separate DbContext. As part of this, I have to initialize the EntityFrameworkCore module, which depends on CoreModule. When the system is initializing the CoreModule, I am getting an error in the "PostInitialize()" code when it reaches the "ChatUserStateWatcher" resolution: <br>

    public override void PostInitialize()
    {
        IocManager.RegisterIfNot<IChatCommunicator, NullChatCommunicator>();
        IocManager.Register<IUserDelegationConfiguration, UserDelegationConfiguration>();

        IocManager.Resolve<ChatUserStateWatcher>().Initialize();
        IocManager.Resolve<AppTimes>().StartupTime = Clock.Now;
    }

Error: <br>

Message:
    Castle.MicroKernel.Handlers.HandlerException : Can't create component 'NexusApps.Authorization.Users.UserManager' as it has dependencies to be satisfied.

    'NexusApps.Authorization.Users.UserManager' is waiting for the following dependencies:
    - Service 'Microsoft.Extensions.Options.IOptions`1[[Microsoft.AspNetCore.Identity.IdentityOptions, Microsoft.Extensions.Identity.Core, Version=3.1.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]]' which was not registered.
    - Service 'Microsoft.AspNetCore.Identity.IPasswordHasher`1[[NexusApps.Authorization.Users.User, NexusApps.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null]]' which was not registered.
    - Service 'System.Collections.Generic.IEnumerable`1[[Microsoft.AspNetCore.Identity.IUserValidator`1[[NexusApps.Authorization.Users.User, NexusApps.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null]], Microsoft.Extensions.Identity.Core, Version=3.1.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]]' which was not registered.
    - Service 'System.Collections.Generic.IEnumerable`1[[Microsoft.AspNetCore.Identity.IPasswordValidator`1[[NexusApps.Authorization.Users.User, NexusApps.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null]], Microsoft.Extensions.Identity.Core, Version=3.1.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]]' which was not registered.
    - Service 'Microsoft.AspNetCore.Identity.ILookupNormalizer' which was not registered.
    - Service 'Microsoft.AspNetCore.Identity.IdentityErrorDescriber' which was not registered.
    - Service 'System.IServiceProvider' which was not registered.
    - Service 'Microsoft.Extensions.Logging.ILogger`1[[NexusApps.Authorization.Users.UserManager, NexusApps.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null]]' which was not registered.
    - Service 'NexusApps.Authorization.Roles.RoleManager' which was registered but is also waiting for dependencies.
    'NexusApps.Authorization.Roles.RoleManager' is waiting for the following dependencies:
    - Service 'System.Collections.Generic.IEnumerable`1[[Microsoft.AspNetCore.Identity.IRoleValidator`1[[NexusApps.Authorization.Roles.Role, NexusApps.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null]], Microsoft.Extensions.Identity.Core, Version=3.1.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]]' which was not registered.
    - Service 'Microsoft.AspNetCore.Identity.ILookupNormalizer' which was not registered.
    - Service 'Microsoft.AspNetCore.Identity.IdentityErrorDescriber' which was not registered.
    - Service 'Microsoft.Extensions.Logging.ILogger`1[[NexusApps.Authorization.Roles.RoleManager, NexusApps.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null]]' which was not registered.

When I skip this statement, my test will run fine, without this error.  I introduced a bool property in the  &lt;AZNProject>CoreModule.cs that allows me to control skipping this when I'm initialiing my testing module.  However, I'm concerned that as I customize the AspNetZero-supplied code, it is going to get more difficult to merge in changes as new versions are released.

Will you add an issue in your development queue to change how the resolution/instantiation of the ChatUserStateWatcher class is managed? It seems to me that it should only be when the ChatService is actually needed. I don't want to have to get the entire AspNetZero schema/services instantiated just to test my added service.


3 Answer(s)