Buduję aplikację MVC3 przy użyciu szkieletu Ninject. Mam usługę, która jest czasochłonna do zainicjowania, a na koniec ta usługa będzie zawierała obiekt zawierający informacje specyficzne dla użytkownika, wtedy muszę ponownie użyć tej usługi, o ile sesja użytkownika jest aktywna, tak aby można uniknąć ponownie zainicjować tę usługę i ponownieKoncepcja zakresu sesji przedmiotu w MVC3
więc moje pytanie jest
Kiedy wiążę usługę korzystając Ninject jaki zakres powinien wybrać, nie ma sesji za zakresu w Ninject, więc jaki jest najlepszy sposób na wdrożenie tego wymogu? czy w ogóle poszedłem w złym kierunku?
Utworzyłem niestandardowego dostawcę dla jednej z moich usług, która utworzy usługę opartą na szczegółach dotyczących nazwy użytkownika, która jest pobierana z bieżącego pliku Controller.User.Identity.Name. Poniższy kod nie będzie działał, ponieważ brakuje zmiennej lokalnej nazwa_użytkownika, w jaki sposób mogę przekazać wartość nazwy użytkownika do mojego dostawcy niestandardowego przez program Ninject, aby móc ją pobrać z IContext?
public class TfsConnectionManagerProvider : Provider<TfsConnectionManager>
{
protected override TfsConnectionManager CreateInstance(IContext context)
{
Uri serverUri = new Uri(ConfigurationHelper.TfsServerUrl);
// Connect to the server without impersonation
using (TfsTeamProjectCollection baseUserConnection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(serverUri))
{
// Get the identity management service
IIdentityManagementService ims = baseUserConnection.GetService<IIdentityManagementService>();
// Get the identity to impersonate
TeamFoundationIdentity identity = ims.ReadIdentity
(
IdentitySearchFactor.AccountName,
userName, //NOTE: How can I get user name value from IContext???
MembershipQuery.None,
ReadIdentityOptions.None
);
// Connect using the impersonated identity
using (TfsTeamProjectCollection impersonatedConnection = new TfsTeamProjectCollection(serverUri, identity.Descriptor))
{
WorkItemStore store = impersonatedConnection.GetService<WorkItemStore>();
return new TfsConnectionManager
{
Store = store
};
}
}
}
}
Zobacz też http: // stackoverflow.com/questions/4687707/ninject-per-session-singleton –