如何编写自己的逻辑以使用Unity初始化属性?

时间:2019-11-19 11:39:11

标签: c# .net api design-patterns unity-container

让我们假设您拥有A级和B级。 这两个类都有一个私有变量:

private Store _store {get;set}

class Class A
{
 private Store _store {get;set}
 constructor()
 {
  init(param1,param2,..);
 }
 init(param1,param2,..)
 {
  //logic to initialize _store
 }
}

class Class B
{
 private Store _store {get;set}
 constructor()
 {
  init(param1,param2,..);
 }
 init(param1,param2,..)
 {
  //logic to initialize _store
 }
}

问题:重复的init()代码

我的解决方案:

  1. 简单工厂模式:使用StoreFactory方法创建一个Init类,该类将返回一个Store实例。
  2. 抽象工厂:创建一个具有init()方法的抽象类,并让A类和B类从中继承
  3. ??

有没有第三种方法可以做到这一点?也许使用依赖注入容器Unity? 我也想知道实现此目标的任何其他方式。有或没有团结。

1 个答案:

答案 0 :(得分:0)

我会避免继承。与继承相比,从长远来看,作曲可能更易于维护,因此,我更喜欢工厂化方法或向类中注入一些服务。

另一种方法是将Init方法作为Store类定义的一部分。并将Store类注入到Class AB的构造函数中( Unity 将负责连接)。
然后,您可以调用Init的{​​{1}}方法,而不必依赖于在要使用商店的每个类中注入工厂。