簡體   English   中英

在MVC中使用ServiceStack Funq依賴注入

[英]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);

通過從Funq容器解析來獲取實例:

然后,當您要使用UserService解析它而不是直接創建實例時,此操作將確保注入依賴項:

using(var userService = HostContext.ResolveService<UserService>())
{
    // Dependancy is already wired up
    userService.Repository ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM