1

我有一个实现 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 不支持 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

1 回答 1

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;
    }
 }
于 2013-07-13T02:23:17.710 回答