如何解析构造函数注入以使用单位依赖关系将特定类作为参数传递

时间:2018-01-30 02:21:14

标签: c# dependency-injection unity-container

我有一个数据访问层(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>())
));

0 个答案:

没有答案