[英]Using ServiceStack Funq Dependency Injection in MVC
在ServicePlugin.cs中,我在Register()
方法中定義了此方法:
container.RegisterAutoWiredAs<ApplicationUserProfileRepository,
IApplicationUserRepository>().ReusedWithin(ReuseScope.Request);
然后,我有了一個ServiceStack服務,嘗試將其解析為正常的依賴項:
public class UserService : ServiceStack.Service
{
private readonly IApplicationUserRepository _repository;
public UserService(IApplicationUserRepository rep)
{
_repository = rep;
}
最后,在我的MVC控制器中,我試圖像這樣調用服務:
using (UserService action = new UserService(new ApplicationUserProfileRepository()))
{
// etc...
上面的代碼工作正常; 但是,我想讓依賴項自動注入,以便我可以簡單地做到這一點:
using (UserService action = new UserService())
{
// etc...
這不是應該使用Service Stack和MVC進行依賴注入的方式嗎?
注意:我從這里獲得了示例https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container
如果將存儲庫設為UserService
上的public
屬性,則在解析Service時,Funq將自動注入依賴項,因為您已經在容器中注冊了依賴項,因此不必通過構造函數添加依賴項。 盡管您的構造函數注入方法仍然可以使用,但是請遵循以下解析說明。
public
存儲庫:
public class UserService : ServiceStack.Service
{
public IApplicationUserRepository Repository { get; set; }
}
向容器注冊存儲庫實例:
HostContext.Container.Register<IApplicationUserRepository>(c => new ApplicationUserProfileRepository()).ReusedWithin(ReuseScope.Request);
然后,當您要使用UserService
解析它而不是直接創建實例時,此操作將確保注入依賴項:
using(var userService = HostContext.ResolveService<UserService>())
{
// Dependancy is already wired up
userService.Repository ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.