Nothing in the nature of the class or its documentation suggests that it has a limited lifetime.
MSDN doesn't mention that it is thread safe, however i can't spot any mutable properties or methods that would mutate the object state (EDIT : apart from the Dispose()
method), which basically suggests that it might be fine to use across multiple threads. Although the underlying Getters or methods could return thread contextual results which might not be the behaviour you are after.
EDIT :
I quote MSDN Magazine January 2008 (.NET 3.5) and i doubt this has changed
In the .NET Framework 3.5, AccountManagement delivers both the power
and ease of use offered by the ActiveDirectoryMembershipProvider
implementation in ASP.NET to programmers working in any environment.
Additionally, the AccountManagement namespace allows you to
authenticate credentials against the local SAM database if needed.
The two ValidateCredentials methods on the PrincipalContext class
provide credential validation. You first create an instance of a
PrincipalContext using the directory you wish to validate against and
specify the appropriate options. After getting context, you test
whether ValidateCredentials returns true or false based on the
supplied user name and password values. Figure 12 shows an example of
authenticating a user in AD LDS.
Figure 12 Authenticating a User in AD LDS (Close Figure 12) //
establish context with AD LDS PrincipalContext ldsContext =
new PrincipalContext(
ContextType.ApplicationDirectory,
"sea-dc-02.fabrikam.com:50000",
"ou=ADAM Users,O=Microsoft,C=US");
// determine whether a user can validate to the directory
Console.WriteLine(
ldsContext.ValidateCredentials(
"user1@adam",
"Password1",
ContextOptions.SimpleBind +
ContextOptions.SecureSocketLayer));
This approach is most useful when you want to validate many different
sets of user credentials quickly and efficiently. You create a single
PrincipalContext object for the directory store in question and reuse
that object instance for each call to ValidateCredentials. The
PrincipalContext can reuse the connection to the directory, which
results in good performance and scalability. And calls to
ValidateCredentials are thread-safe, so your instance can be used
across threads for this operation. It's important to note that the
credentials used to create the PrincipalContext are not changed by
calls to ValidateCredentials—the context and method call maintain
separate connections.