I am building an ECommerce store that is configurable by admin users via c# desktop (Windows Forms) application, and is consumed by end-users via a website. As part of my design, quite a lot of business logic is shared between both the desktop and the web components. Use of either the desktop or web app requires authentication.

As I'm building it, I'm picking up on some code smells because I keep finding myself having to add a parameter to class constructors that identify information about what kind of user is using the business logic (ie IP address of user, enum for whether it is a desktop or web, System User ID number, etc). 

This identifier class that stores this information is feeling like global data, which I try to avoid because of SOLID principles, etc, but I'm really having a difficult time coming up with a better solution for how a class can have quick access to all the information it needs.

Is there a canned solution for this problem?