我有一个实现MongoRepository的存储库,它使用泛型我试图在容器中注册该类型到目前为止这是我得到的:
public override void Configure(Container container)
{
container.RegisterAutoWiredAs<UserRepository,
IUserRepository>();
//Trying to wireup the internal dependencies
container.RegisterAutoWiredType(
typeof(MongoRepository<>),
typeof(IRepository<>));
}
我也试过RegisterAutoWiredAs<UserRepository>
。
问题是当我运行应用程序时出现以下错误:
尝试解析服务“{ServiceName}”或其中一个时出错 自动连接的依赖项
我想是因为我注册了存储库而没有将mongoDB存储库注册为依赖项。
据我所知funq doesn't support generics,但我不确定这与ServiceStack的情况是否相同。
repo具有以下定义:
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; }
}
答案 0 :(得分: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;
}
}