我的要求是非常相似,这里 问的问题 - With.Parameters.ConstructorArgument with ninject 2.0 这可能是一个愚蠢的问题 - 但是,是不是在发送参数构造函数的方法打电话给Get<IMyType>
违背了解耦的哲学(我认为这是DI的主要动机)本身?
这假设IMyType
的用户已知道IMyType
的具体实现的构造函数。
由于无法在接口中声明构造函数参数,所以将来可能会添加另一个实现,这会在您绑定到该实现的构造函数&中采用不同的参数集。再次,根据去耦原则,Bind<IMyType>.To<ADifferentImpl>()
的代码应该能够与之前编写的任何模块一起工作,该模块从Get<IMyType>
获取实现对象。我试图使用Ninject下列情形
我有非常相似的要求 - 我不知道绑定时的构造函数参数的值,但只在访问时。我认为在特定情况下采取的最佳方法是与艾德里安格里戈尔的答案一致。 请让我知道是否有任何其他方法。
但是,什么如果'MyContext'对象需要使用一些特定于上下文的信息进行初始化,并且它没有默认构造函数。 'MyContext {public MyContext(string category){...}}'类,只有在我们获取存储库的代码中已知该类别?也就是说,只有在你调用'DI.Resolve()'的代码中的那一点?如何将类别信息发送给构造函数? –
2013-03-01 05:45:30
然后使用工厂模式!它适用于这种情况。 – Maris 2013-03-01 05:49:52
如果您不知道如何使用它,请问我会提前给您 – Maris 2013-03-01 05:52:44