2013-07-13 55 views
1

我有一个实现MongoRepository它使用我想注册在容器中的泛型类型的存储库到目前为止,这是我得到:解决了依赖ServiceStack IOC容器

public override void Configure(Container container) 
{ 
    container.RegisterAutoWiredAs<UserRepository, 
     IUserRepository>(); 

    //Trying to wireup the internal dependencies 
    container.RegisterAutoWiredType(
     typeof(MongoRepository<>), 
     typeof(IRepository<>)); 
} 

我试过RegisterAutoWiredAs<UserRepository>为好。

问题是,当我跑我得到了以下错误的应用:

Error trying to resolve Service '{ServiceName}' or one of its autowired dependencies

我猜是因为我已经注册了仓库,但不会注册的MongoDB库作为一个依赖。

据我所知funq doesn't support generics,但我不确定这是否与ServiceStack是相同的情况。

回购具有以下定义:

public class UserRepository 
    : MongoRepository<User>, IUserRepository 
{ 
} 

public interface IUserRepository : IRepository<User> 
{ 
} 

编辑:

这是服务定义,实际上是非常基本的!

public class MyService : Service { 
    private readonly IUserRepository _userRepository; 

    public MyService(IUserRepository userRepository) 
    { 
     _userRepository = userRepository; 
    } 

    public UserResponse Any(UserRequest userRequest) 
    { 
      //_userRepository.GetById(id)     
    } 
} 

的DTO:

public class UserRequest 
{ 
    public string Id { get; set; } 
} 

public class UserResponse 
{ 
    public User User { get; set; } 
} 

回答

4

Funq工作非常直观,即无论你注册就可以解决。所以只要确定你想要解决的问题,与你所注册的内容是一样的。

有没有神奇的行为Funq,所以这是什么行不通的例子:

container.RegisterAutoWiredType(typeof(MongoRepository<>), typeof(IRepository<>)); 

如果你希望能够解决MongoRepository<User>您需要注册它,如:

container.RegisterAutoWiredAs<MongoRepository<User>,IUserRepository>(); 

哪你就可以自由地解决像一个正常的依赖性:试图

public class MyService : Service 
{ 

    private readonly IUserRepository _userRepository; 

    public MyService(IUserRepository userRepository) 
    { 
     _userRepository = userRepository; 
    } 
} 
+0

有I'm问题网络IRepository 与MongoRepository

+0

@Pedro你假设魔术行为,Funq中没有 - 我更新了我的答案以显示明确的注册。 – mythz

+0

感谢您的更新!但我试图解决从MongoRepository 继承的UserRepository,我已经注册了,所以我认为它必须是其他的,因为如果我从继承中删除mongoRepository,它工作正常! –