/ / Як вирішити сховище користувачів за допомогою Windsor IoC на початку програми? - asp.net-mvc, інверсія контролю, замок-віндзор, mvccontrib, вирішення

Як вирішити сховище користувачів за допомогою Windsor IoC на початку програми? - asp.net-mvc, inversion-of-control, castle-windsor, mvccontrib, resolve

Я отримую повідомлення про помилку "Посилання на об'єкт не встановленодо екземпляра об'єкта. ", коли я намагаюся використовувати сховище UserRepos. Питання в тому, як я можу вирішити сховище користувачів на початку програми (ASP.NET MVC) Що тут не так?

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;
}
}
}
}

Дякую за допомогу!

Відповіді:

4 для відповіді № 1

Причиною цього винятку є нерозуміння життєвого циклу HttpApplication. Ці статті пояснюють це досить добре:

у вашому випадку це було б правильним використанням контейнера:

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
}
}