open Microsoft.AspNet.Identity
[<Measure>] type PatientId
type ApplicationUser(patientId:int<PatientId>,username) =
let debug (s:string) = System.Diagnostics.Debug.WriteLine(s)
member x.PatientId = patientId
member x.Username = username
member x.get_Id () = string patientId
member x.get_UserName() = x.Username
member x.set_UserName value = debug <| sprintf "attempted to set username to %s" value
type UserFindPredicate = | ById of string | ByUsername of string
type CustomUserStore(create:ApplicationUser -> ApplicationUser, delete, find, update,users:System.Linq.IQueryable<ApplicationUser>) =
let mutable isDisposed = false
member private x.throwIfDisposed () = if isDisposed then failwith "Access to disposed object CustomUserStore"
member private x.createAsync user =
new System.Threading.Tasks.Task(fun _ -> create user |> ignore)
member private x.deleteAsync user =
new System.Threading.Tasks.Task(fun _ -> delete user)
member private x.findByAsync pred =
| Some user -> System.Threading.Tasks.Task.FromResult(user )
| _ -> System.Threading.Tasks.Task.FromResult(null )
member x.get_Users = users
interface IUserStore<ApplicationUser>
interface IQueryableUserStore<ApplicationUser>
interface IQueryableUserStore<ApplicationUser,string> with
member x.Users = x.get_Users
interface IUserStore<ApplicationUser,string> with
member x.CreateAsync user = x.createAsync user
member x.DeleteAsync user = x.deleteAsync user
member x.FindByIdAsync userId = x.findByAsync <| UserFindPredicate.ById userId
member x.FindByNameAsync userName = x.findByAsync <| UserFindPredicate.ByUsername userName
member x.UpdateAsync user =
new System.Threading.Tasks.Task(fun _ -> update user)
interface System.IDisposable with
member x.Dispose() = isDisposed <- true
type ApplicationUserManager (store : ApplicationUser IUserStore) =
inherit UserManager<ApplicationUser>(store)
System.Diagnostics.Debug.WriteLine("created an ApplicationUserManager!")
interface System.IDisposable with
System.Diagnostics.Debug.WriteLine("Disposing the ApplicationUserManager")
System.Diagnostics.Debugger.Break();