現在、Windowsフォームアプリケーションの構造を作成しています。依存関係注入を実装する際にNULL REFERENCEエラーが発生しました。私は簡単な単体テストのためにこの種のアプローチをMVCアプリケーションで使用していましたが、ここでWindowsフォームアプリケーションで実装する方法を理解できません。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
}
}
はここでここで
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インタフェースを継承しているクラスは、私のIServiceTasksインタフェース
public interface IServiceTasks
{
bool CreateAssignment();
}
ですIInterfaceTasksインターフェイスの場合
public interface IInterfaceTasks
{
bool CreateAssignments(IEntities.AssignmentEntityRequest request);
}
どうすればこの権利を実装できますか?
更新: PWSは、あなたの問題は、Windowsフォームを作成し、デフォルトコンストラクタでInitializeComponent()
を呼び出していないということですここ
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
IInterfaceTasks tasks = new pws();
Application.Run(new pws(tasks));
}
?デフォルトのコンストラクタは実際のFormとして機能し、もう1つはメンバ変数を設定するので、とにかく完全に動作することはできません。 –
あなたの質問の回答を見るには、私のアップデートをご覧ください。ありがとう@SamKuhmonen! – vonndutch
はい、ここでは、デフォルトコンストラクタを呼び出してオブジェクトを作成しています。 '_tasks'変数に何も設定していないので、常にnullになります。依存性注入フレームワークが必要な場合、またはコードを5つのパラメータに変更しても、 'InitializeComponent()'を呼び出す必要があります。 –