我有一个数据访问层(IDal)接口
public interface IDal<T>{
void Write(T object);
T Read();
}
我有两个实现此接口的类,它从两个不同的源访问数据。
public class Source1<T>:IDal<T>{
public void Write(T object){ }
public T Read(T object){ }
}
public class Source2<T>:IDal<T>{
public void Write(T object){ }
public T Read(T object){ }
}
我有一个共同的服务界面
public interface IService<T>{
T Get(int id);
T Save(T obj);
T Update(T obj);
T Delete(int id);
}
我有一个具有imeplemented服务接口的服务类
public class Service<T> : IService<T>{
IDal<T> _dal;
public Service(IDal<T> dal){
_dal = dal;
}
public T Get(int id) { }
public T Save(T obj) { }
public T Update(T obj) { }
public T Delete(int id) { }
}
我有两个不同的控制器
public class Bank1Controller(){
IService<Bank1Properties> _service;
public Bank1Controller(IService<Bank1Properties> service){
_service = service
}
}
public class Bank2Controller(){
IService<Bank2Properties> _service;
public Bank2Controller(IService<Bank2Properties> service){
_service = service
}
}
这里我想从Unity Dependency向Bank1和Source2注入Source1 DAL到Bank2 由于source1和source2都是从IDal继承的。
container.RegisterType<IService<Bank1Properties>, Service<Bank1Properties>>();
container.RegisterType<IDal<Bank1Properties>, Source1<Bank1Properties>>();
container.RegisterType<IDal<Bank2Properties>, Source2<Bank2Properties>>();
这里我的两个控制器都尝试访问source2,但我想注入Bank1 = source1和Bank2 = source2。 我如何解决它。
如果我以这种方式注册这种类型,它可以很好地工作, 但我不知道这是好方法。有没有更好的方法。
container.RegisterType<Bank1Controller>(new InjectionConstructor(
new Service<Bank1Properties>(new Source1<Bank1Properties>())
));
container.RegisterType<Bank2Controller>(new InjectionConstructor(
new Service<Bank2Properties>(new Source1<Bank2Properties>())
));