/ / Jak rozwiązać repozytorium użytkowników za pomocą Windsor IoC na początku aplikacji? - asp.net-mvc, inwersja-kontroli, zamek-windsor, mvccontrib, rozwiązanie

Jak rozwiązać repozytorium użytkowników za pomocą Windsor IoC na początku aplikacji? - asp.net-mvc, inwersja-kontroli, zamek-windsor, mvccontrib, postanowienie

Otrzymuję komunikat o błędzie „Nie ustawiono odwołania do obiektudo wystąpienia obiektu. ”kiedy próbuję użyć repozytorium UserRepos. Pytanie brzmi, jak mogę rozwiązać repozytorium użytkowników na początku aplikacji (ASP.NET MVC) Co jest nie tak?

public class MyApplication : HttpApplication
{
public IUserRepository UserRepos;
public IWindsorContainer Container;

protected void Application_Start()
{
Container = new WindsorContainer();

// Application services
Container.Register(
Component.For<IUserRepository>().ImplementedBy<UserRepository>()
);
UserRepos = Container.Resolve<IUserRepository>();
}

private void OnAuthentication(object sender, EventArgs e)
{
if (Context.User != null)
{
if (Context.User.Identity.IsAuthenticated)
{
//Error here "Object reference not set to an instance of an object."
var user = UserRepos.GetUserByName(Context.User.Identity.Name);

var principal = new MyPrincipal(user);
Thread.CurrentPrincipal = Context.User = principal;
return;
}
}
}
}

Dziękuję za pomoc!

Odpowiedzi:

4 dla odpowiedzi № 1

Przyczyną tego wyjątku jest niezrozumienie cyklu życia HttpApplication. Te artykuły dość dobrze to wyjaśniają:

w twoim przypadku byłoby to prawidłowe użycie kontenera:

public class MyApplication: HttpApplication {
private static IWindsorContainer container;

protected void Application_Start()     {
container = new WindsorContainer();
... registrations
}

private void OnAuthentication(object sender, EventArgs e) {
var userRepo = container.Resolve<IUserRepository>();
... code that uses userRepo
}
}