我正在重构一个类并为它添加一个新的依赖项.该类目前正在构造函数中使用其现有依赖项.因此,为了保持一致性,我将参数添加到构造函数中.
当然,对于单元测试,有一些子类加上甚至更多,所以现在我正在玩改变所有构造函数的游戏来匹配,并且它需要很长时间.
这让我觉得使用带有setter的属性是获得依赖关系的更好方法.我认为注入的依赖项不应该是构造类实例的接口的一部分.您添加了一个依赖项,现在所有用户(子类和任何直接实例化您的用户)突然知道它.这感觉就像打破了封装.
这似乎不是现有代码的模式,所以我希望找出一般的共识是什么,构造函数与属性的优缺点.使用属性设置器更好吗?
在ServiceStack应用程序中,我将Funq配置为按请求注入会话,如下所示:
container.Register<NHibernate.ISessionFactory>(sessionFactoryForDB1);
container.Register<NHibernate.ISession>(c => c.Resolve<NHibernate.ISessionFactory>()
.OpenSession())
.ReusedWithin(Funq.ReuseScope.Request);
Run Code Online (Sandbox Code Playgroud)
我的服务看起来像这样,它的工作正常:
public class MyNhAwareService : Service
{
public ISession Session { get; set; }
public object Any(DoSomething request)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我想在其自己的会话工厂中添加第二个NHibernate数据库时,问题就出现了:
container.Register<NHibernate.ISessionFactory>(sessionFactoryForDB1);
container.Register<NHibernate.ISession>(c => c.Resolve<NHibernate.ISessionFactory>()
.OpenSession())
.ReusedWithin(Funq.ReuseScope.Request);
// add a different session factory
container.Register<NHibernate.ISessionFactory>(sessionFactoryForDB2);
Run Code Online (Sandbox Code Playgroud)
我一直在尝试用各种方式Funq可以使用,我想我已经找到了前进的时候,我发现了"RegisterNamed()"方法,但仍然没有帮助,因为我不能用什么除了我的服务中的TryResolve().
这似乎应该是可能的,但是我正在试图解决这个问题.我会非常感激任何建议.