В настоящее время я создаю структуру приложения формы окна. Я столкнулся с ошибкой NULL REFERENCE при внедрении инъекции зависимостей. Я использовал этот подход в своих приложениях MVC для легкого модульного тестирования, но не могу понять, как его реализовать здесь, в приложении Windows Form.Инъекция зависимостей в приложении WindowsForm C#
Это частичный класс главной формы:
public partial class pws : Form
{
private IInterfaceTasks _tasks { get; set; }
public pws(IInterfaceTasks tasks)
{
InitializeComponent();
_tasks = tasks;
}
private void cmdSave_Click(object sender, EventArgs e)
{
IEntities.AssignmentEntityRequest request = new IEntities.AssignmentEntityRequest();
<code mapping here>
_tasks.CreateAssignments(request); --> _tasks here is null
}
}
Вот класс, который наследует интерфейс IServiceTasks
public class CreateAssignmentsInterface : IInterfaceTasks
{
private Service.IServiceTasks _task;
public CreateAssignmentsInterface(Service.IServiceTasks task)
{
_task = task;
}
public bool CreateAssignments(IEntities.AssignmentEntityRequest request)
{
Helpers.Helpers mapper = new Helpers.Helpers();
var assignmentRequest = new SEntities.AssignmentEntityRequest();
assignmentRequest = mapper.MapInterfacetoServiceRequest(request);
_task.CreateAssignment(); --> _task here is null
return true;
}
}
Вот мой IServiceTasks интерфейс
public interface IServiceTasks
{
bool CreateAssignment();
}
И для интерфейса IInterfaceTasks
public interface IInterfaceTasks
{
bool CreateAssignments(IEntities.AssignmentEntityRequest request);
}
Может ли кто-нибудь помочь мне, как я могу реализовать это право?
обновление: PWS вызывается здесь
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
IInterfaceTasks tasks = new pws();
Application.Run(new pws(tasks));
}
Как вы инстанцировании 'pws'? Поскольку конструктор по умолчанию заставляет его работать как фактическая форма, а другой задает переменную-член, поэтому он не может полностью работать в любом случае. –
см. Мое обновление, чтобы увидеть ответ на ваш вопрос. спасибо @SamiKuhmonen! – vonndutch
Да, здесь вы просто создаете объект, вызывая конструктор по умолчанию. Ничто не устанавливает переменную '_sasks', так что она всегда будет нулевой. Вам нужна какая-то среда для инъекций зависимостей, или вам нужно изменить свой код на пять параметров и по-прежнему вызывать 'InitializeComponent()' –