#c# #asp.net #.net #code-behind #simple-injector
#c# #asp.net #.net #кодирование #простой инжектор
Вопрос:
Итак, у меня есть слой пользовательского интерфейса и слой BLL.
namespace BLL
{
public class User : IUser
{
public void DoSomething(){}
}
public interface IUser
{
void DoSomething();
}
public static class TypeRegistry
{
public static void RegisterTypes(Container container)
{
container.Register<IUser, User>(Lifestyle.Singleton);
}
}
}
namespace UI
{
public partial class Login : System.Web.UI.Page
{
private IUser user;
}
}
Я не могу понять, как заставить пользователя не быть нулевым. Я попытался создать конструктор, но это вызвало ошибку
public Login(IUser user){ this.user = user;}
Ошибка компиляции: Login не содержит конструктор, который принимает 0 аргументов
Комментарии:
1. Вы настроили ASP.NET использовать ваш фреймворк внедрения зависимостей? И правильно ли вы настроили платформу DI для обработки зависимостей для ASP.NET ?
2. Я добавил пакет simple injector, если вы это имеете в виду. Но я знаю, что простой инжектор вводит объект в конструктор, но в пользовательском интерфейсе у вас нет конструктора
3. Вам необходимо инициализировать
user
поле в событии страницы. Взгляните на жизненный цикл страницы и определите, какое событие подходит (вероятноPage_Init
, илиPage_Load
) для вашего варианта использования.
Ответ №1:
Эта ссылка помогла мне получить ответ:
https://simpleinjector.readthedocs.org/en/latest/wpfintegration.html
Похоже на ссылку @Steven
https://simpleinjector.readthedocs.org/en/latest/windowsformsintegration.html
Ответ №2:
Если вы выполнили всю регистрацию надлежащим образом, как показано в руководстве по интеграции веб-форм документации, то я думаю, что проблема связана с тем, что вы установили уровень доступности IUser на своей странице private
.
Так private IUser user;
и должно стать public IUser user;
. Поскольку веб-формы требуют, чтобы вы выполняли внедрение свойств поверх внедрения конструктора, пользователь свойства должен быть общедоступным для внедрения.