[英].NET MVC Dependency Injection on Models?
問題:有沒有辦法使用Ninject將依賴項注入我的MVC模型?
首先,我是MVC和DI(以及stackoverflow,btw)的新手,所以我想確保我在這個問題上走下正軌。 幾天來我一直在谷歌搜索答案,但我找不到一個干凈的解釋......我正在使用C#,. NET4,MVC3,Ninject和VS2010。
這是一個場景:我有一個新的用戶表單,用戶可以在其中設置登錄,角色和設置其他配置文件數據。 提交時,我需要將登錄信息保存到MembershipProvider,RoleProvider的角色等等......它有點毛茸茸,因為我根據項目要求使用雙提供程序(Active Directory /本地數據庫),因此,在確定要保存到哪個提供程序時,如果用戶已經存在,是否允許自我識別任何角色,還有一些邏輯,等等。
我覺得這個邏輯應該放在我的模型上的.Save()方法中。 但是,我需要將我的提供者的實例注入到我的模型中,而Ninject似乎沒有注入模型 (至少不使用NuGet包附帶的默認設置)。 因此,我的初步問題。
我可以想到一些替代方案......
那么...... 有沒有辦法讓Ninject模型或者我需要重新考慮因為我是新手嗎?
我會選擇一個。 它並不過分 - 添加一個類和一個接口只需幾行代碼,它可以保持您的實現整潔,也許以后您可能想要添加更多方法...更新用戶?
添加一個接口和類來處理控制器使用的--ninject將為您獲取此實例。 我以IMembershipAndRoleService為例進行了編寫。
public interface IMembershipAndRoleService
{
void ProcessNewUser(User newUser);
}
public class YourController : Controller
{
private readonly IMembershipAndRoleService _membershipAndRoleService;
public YourController(IMembershipAndRoleService membershipAndRoleService)
{
_membershipAndRoleService = membershipAndRoleService;
}
[HttpPost]
public ActionResult NewUserFormAction(NewUserForm newUserForm)
{
//process posted form, possibly map / convert it to User then call to save
_membershipAndRoleService.ProcessNewUser(user);
//redirect or return view
}
}
最后創建實現IMembershipAndRoleService的類,此類將使用您的Membership和Role提供程序或其他接口,這樣可以簡化此類中的邏輯。
如果您正在使用NuGet的Ninject.MVC包,它將掛鈎到MVC DependencyResolver,因此您可以執行此操作以獲取Ninject注入的模型實例。
var model = System.Web.Mvc.DependencyResolver.Current.GetService<MyModel>();
服務架構可能是設計應用程序的更好方法,但對於“我的模型為什么不注入”的簡單問題,這是因為您需要通過依賴注入容器創建它,而不是通過new()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.