在我追求Unity知识的过程中,我想注册一个类型作为构造函数参数的“注册类型”。如何在构造函数中注入'register typed'参数
在我Bootstrapper.cs文件我有这样的配置:
container.RegisterType<IRepository<User>, UserRepository>();
container.RegisterType<BaseService<User>, UserService>(); // <-- Should I inject the parameter here ?
container.RegisterType<IFactory<BaseService<User>>, Factory<UserService>>(); // <-- or here
现在,这是BaseService类的实现:
public abstract class BaseService<TModel>
{
private readonly IRepository<TModel> _repository;
// Injected parameter in constructor
public BaseService(IRepository<TModel> repository)
{
_repository = repository;
}
}
我的问题是如何在BaseService构造注入此行解决的参数: container.RegisterType,UserRepository>(); ?
我检查了我使用InjectedParameter,但我不知道如何在这种情况下正确使用。
感谢,
编辑
这里是其它实现:
UserService:
public class UserService : BaseService<User>
{
public UserService(IRepository<User> repository) : base(repository)
{
}
}
厂:
public class Factory<T> : IFactory<T> where T : new()
{
public T Create()
{
return new T();
}
}
如果你想先注册'IRepository',其次解决它,然后注册'BaseService '那dependend在'步骤2中的IRepository ',那么'InjectionConstructor'将帮助你。如果你只想在其他地方注册'IRepository '并解析'BaseService '(不在config(Bootstrapper.cs)文件中),你应该使用'DependencyOverride'作为它。它会更有用,如果你举一个例子在哪里以及如何解决'BaseService ' –