2016-10-20 57 views
1

我曾經在一個項目模型下面的類:ASP.NET核心服務登記錯誤

public interface IUserService 
{ 
    IEnumerable<ApplicationUser> GetUsers(string FirstName = null); 
    ApplicationUser GetUserById(string Id); 
    ApplicationUser GetUserByUsername(string Username); 
    void CreateUser(ApplicationUser User); 
    void SaveUser(); 
} 

public class UserService : IUserService 
{ 
    private readonly IUserRepository usersRepository; 
    private readonly IUnitOfWork unitOfWork; 

    public UserService(IUserRepository usersRepository, IUnitOfWork unitOfWork) 
    { 
     this.usersRepository = usersRepository; 
     this.unitOfWork = unitOfWork; 
    } 

    #region Members 

    public void CreateUser(ApplicationUser User) 
    { 
     throw new NotImplementedException(); 
    } 

    public ApplicationUser GetUserById(string Id) 
    { 
     var user = usersRepository.GetUserById(Id); 
     return user; 
    } 

    public ApplicationUser GetUserByUsername(string Username) 
    { 
     var user = usersRepository.GetUserByUsername(Username); 
     return user; 
    } 

    public IEnumerable<ApplicationUser> GetUsers(string FirstName = null) 
    { 
     if (string.IsNullOrEmpty(FirstName)) 
     { 
      return usersRepository.GetAll(); 
     } 
     return usersRepository.GetAll() 
      .Where(c => c.Profile.FirstName == FirstName); 
    } 

    public void SaveUser() 
    { 
     unitOfWork.Commit(); 
    } 

    #endregion 
} 

在我的ASP.NET核心(完整的.NET框架),在Startup.cs我有:

// Add application services. 
services.AddTransient<IEmailSender, AuthMessageSender>(); 
services.AddTransient<ISmsSender, AuthMessageSender>(); 
services.AddScoped<IUserService, UserService>(); 

我得到一個錯誤,當我運行應用程序:

InvalidOperationException: Unable to resolve service for type 'Data.Repositories.Identity.IUserRepository' while attempting to activate 'Service.Identity.UserService'. 

就像我說的上面,這是一個ASP.NET核心與完整的.NET框架。有什麼想法嗎?

+1

IUnitOfWork和IUserRepository是否也註冊在您的服務集合中?就我所見,這兩項在UserService中是必需的。 –

+0

我使用具有以下接口的存儲庫模式:IDbFactory,IUnitOfWork,IRepository。我沒有在我的Startup.cs文件中註冊它們中的任何一個。我應該註冊所有? –

回答

2

你必須在你的服務集合中註冊你想要注入到類構造函數中的所有東西。至於我可以SES:

public UserService(IUserRepository usersRepository, IUnitOfWork unitOfWork) 
{ 
    this.usersRepository = usersRepository; 
    this.unitOfWork = unitOfWork; 
} 

您預計IUserRepository和IUnitOfWork會自動解決,注入 - 所以他們必須註冊。如果UnitOfWork需要在構造函數中注入IDbFactory,那麼它也必須在服務集合中註冊。否則依賴注入框架將不知道解決它。