私はコンセプトに問題があり、依存性注入についてはC#のコード化レベルがあります。今まで私は、依存関係を解決するために単一性または自動化を使用できることを知っています。しかし、これが正しいかどうかにかかわらず、私のコードに問題があります。依存性注入コードレベル
プロジェクトには4つのレイヤーがあります。
Webプロジェクト
サービスレベル
リポジトリレベル
- エンティティ
このです(Webプロジェクトで)私のMVCコントローラレベルのコード
public class EmployeeController : Controller
{
private readonly IEmployeeService _employeeService;
public EmployeeController() : this(new EmployeeService())
{
}
public EmployeeController(IEmployeeService employeeService)
{
_employeeService = employeeService;
}
public ActionResult EmployeeList()
{
try
{
EmployeeVM empVM;
List<EmployeeVM> lstEmpVM = new List<ViewModel.EmployeeVM>();
var empList = _employeeService.GetAllEmployeeList();
//below foreach use to map domain object to viewmodel object.
foreach (var item in empList)
{
empVM = new EmployeeVM();
empVM.EmployeeId = item.EmployeeId;
empVM.Department = item.Department;
empVM.FirstName = item.FirstName;
empVM.LastName = item.LastName;
empVM.Permenent = item.Permanent;
lstEmpVM.Add(empVM);
}
return View(lstEmpVM);
}
catch (Exception ex)
{
throw;
}
}
}
これは、これはEmployeeService
public interface IEmployeeService
{
IEnumerable<Employee> GetAllEmployeeList();
}
のインタフェースである同じデータ層に接続リポジトリがある(サービスレベル)私EmployeeServiceサービスレベルコード
public class EmployeeService : IEmployeeService
{
private readonly IEmployeeRepository _empRepository;
public EmployeeService() : this(new EmployeeRepository())
{
}
public EmployeeService(IEmployeeRepository empRepository)
{
_empRepository = empRepository;
}
public IEnumerable<Employee> GetAllEmployeeList()
{
try
{
var ObjEmpList = _empRepository.GetEmployees();
return ObjEmpList;
}
catch (Exception ex)
{
throw;
}
}
//Some logical code going here
}
あります上記のコード化。
私の上記のコードは依存性注入で問題ないと教えてください。あるいは、コードを変更する必要がありますか?実際に私は考えていません、これらのモジュールは適切に切り離されているかどうか。
「EmployeeController」クラスと「EmployeeService」クラスからデフォルトのパラメータなしコンストラクタを削除するだけで、コードはDIに適しています。これらのデフォルトのコンストラクタでは、現在、さまざまな層と依存関係の特定の実装を結合しています。特定の実装をサービスに組み込むことは、DIフレームワークの責任である必要があります。 –
プロジェクトでUnityまたはAutofacを実際に使用している場合は、上記のいずれかのクラスのDefaultコンストラクタは必要ありません。依存関係が適切に設定されているとすれば、実行時にそれを心配することなく解決されます。 –
私がユニティまたはオートファックを使用しない場合、実際に私はDIで自分のプロジェクトを行うことができませんか? – weeraa