私はDICをMVCプロジェクトに適用することを学んでいます。そこで、私はこのDDD風のDIC対応のレイアウトを最もよく理解できるようにスケッチしました。私は過去数日間、多くのブログ記事wikiを読みました。しかし、私はそれを正しく実装することに自信がありません。それらを適切な方法でDICに入れる方法を教えていただけますか?私はすべての測定値の後でNinjectまたはWindsorを好みますが、それを行う方法について正しい考えを得ることができる限り、anyDICはそれを行います。
Webコントローラー...
public class AccountBriefingController {
//create
private IAccountServices accountServices { get; set; }
public AccountBriefingController(IAccountServices accsrv)
accountServices = accsrv;
}
//do work
public ActionResult AccountBriefing(string userid, int days) {
//get days of transaction records for this user
BriefingViewModel model = AccountServices.GetBriefing(userid, days);
return View(model);
}
}
モデルを表示..。
public class BriefingViewModel {
//from user repository
public string UserId { get; set; }
public string AccountNumber {get; set;}
public string FirstName { get; set; }
public string LastName { get; set; }
//from account repository
public string Credits { get; set; }
public List<string> Transactions { get; set; }
}
サービスレイヤー..。
public interface IAccountServices {
BriefingViewModel GetBriefing();
}
public class AccountServices {
//create
private IUserRepository userRepo {get; set;}
private IAccountRepository accRepo {get; set;}
public AccountServices(UserRepository ur, AccountRepository ar) {
userRepo = ur;
accRepo = ar;
}
//do work
public BriefingViewModel GetBriefing(string userid, int days) {
var model = new BriefingViewModel(); //<---is that okay to new a model here??
var user = userRepo.GetUser(userid);
if(user != null) {
model.UserId = userid;
model.AccountNumber = user.AccountNumber;
model.FirstName = user.FirstName;
model.LastName = user.LastName;
//account records
model.Credits = accRepo.GetUserCredits(userid);
model.Transactions = accRepo.GetUserTransactions(userid, days);
}
return model;
}
}
ドメインレイヤーとデータモデル...
public interface IUserRepository {
UserDataModel GetUser(userid);
}
public interface IAccountRepository {
List<string> GetUserTransactions(userid, days);
int GetUserCredits(userid);
}
// Entity Framework DBContext goes under here
私の実装が間違っているかどうかを指摘してください。たとえば、AccountServices-> GetBriefing-> new BriefingViewModel()で感じることができますが、スタッドをDICに適合させる方法がわかりません。
ご助力ありがとうございます!