我正在思考一个C#库的设计,它将有几个不同的高级函数.当然,这些高级功能将尽可能使用SOLID类设计原则来实现.因此,可能存在供消费者定期直接使用的类,以及作为那些更常见的"最终用户"类的依赖性的"支持类".
问题是,设计库的最佳方法是:
我目前的想法是为常见的DI库提供一些"DI注册模块"(例如,一个StructureMap注册表,一个Ninject模块),以及一个非DI的集合或工厂类,并包含与这几个工厂的耦合.
思考?
如何将IoC容器用于单元测试?使用IoC在大型解决方案(50多个项目)中管理模拟是否有用?有经验吗?任何C#库在单元测试中都能很好地使用它吗?
我正在探索依赖注入,并且在整个地方使用术语组合根.那是什么?
我有一个解决方案,有两个相关的(对这个问题)项目,还有一些其他项目;
我的问题基本上是我应该使用Ninject 2做IoC,考虑到......
我把自己画成了一个心理角落,因为我只看到了三个选项.类库中的DI,Web应用程序中的DI,或两者都有,但每个都有问题:
有没有人对如何做这样的事情有一些"最佳实践"或指导方针?我无法想象我是第一个在这种情况下结束的人,而且知道"正确"的做法是什么肯定会很好......
谢谢!
所以我的公司使用Castle Windsor IoC容器,但感觉"关闭":
设计系统的人坚持认为IoC容器使系统更好.我们有1200多个公共类,所以它是一个很大的系统,你期望找到像Windsor这样的框架.但我仍然持怀疑态度.
我的公司是否有效地使用IoC?使用Windsor的新对象比使用new关键字的新对象更有优势吗?
在花了几个月研究DDD方法之后,我现在开始将这些概念应用到我公司的实际产品中.事实上,我的任务是为未来的开发创建一个合适的,可维护的架构.
我们决定使用以下技术:EF4(真正的v2),Unity
我获得的信息量最具启发性,但是,我在最佳实践中留下了几个问题:
问题#1: DTO - 最佳实践
我有我的域对象(POCO类).有几种方法可以实现这些类.
public abstract class POCOBase<T> : ValidationBase, IPOCO where T : DTOBase, new()
{
public T Data { get; set; }
public POCOBase()
{
Data = new T();
}
public POCOBase(T dto)
{
Data = dto;
}
}
public class SomePOCO : POCOBase { }
public class SomeDTO : DTOBase
{
public String Name { get; set; }
public String Description { get; set; }
public … 我个人喜欢从C#代码配置StructureMap的选项.根据我的理解,DI的优点之一是我们可以轻松交换新的具体实例.但是,如果配置是在代码中定义的,那么具体实例在dll中是硬编码的.
所以,实际上,它与硬件编码依赖关系一样好,对吧?我知道,在测试过程中它会让生活更轻松......
我的观点是,使用xml配置不是更好吗?你想插入一个新的具体实例?只需让安装程序用新的文件覆盖structuremap.config文件.
那么,配置StructureMap的首选方法是什么?
额外:我暂时被迫使用C#配置,因为我不知道如何将连接字符串传递给实例.我可以在配置文件中编写连接字符串,但我想重用app.config中定义的连接字符串.
这让我困扰了一段时间,如果这是一个神话,我没有任何线索.
似乎工厂模式可以减轻为类添加依赖项的痛苦.
例如,在一本书中,它有类似的东西
假设您有一个名为Order的类.最初它并不依赖于任何东西.因此,您不必费心使用工厂来创建Order对象,而您只是使用plain new来实例化对象.但是,您现在要求必须与客户关联创建订单.您需要更改百万个位置才能添加此额外参数.如果您只为Order类定义了一个工厂,那么您可以在没有同样痛苦的情况下满足新要求.
这与为构造函数添加额外参数有何不同?我的意思是你仍然需要为工厂提供一个额外的论据,而且还有百万个地方使用,对吗?
您发现哪些技术对于使用Inversion of Control容器管理大型项目的依赖性很有用?
你是在一个地方引导所有东西,还是将它拆分?
你有没有使用过多个容器?
我正在开发一个由许多模块组成的应用程序,其中一些模块依赖于其他模块.我现在决定使用Autofac来解决循环依赖关系并改进体系结构.
要配置autofac,我使用xml方法(http://code.google.com/p/autofac/wiki/XmlConfiguration).
现在我不确定如何实现Autofac.我是否需要在应用程序的每个模块中引用autofac?这意味着我每次想要解决依赖关系时都必须注册所有组件...
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterModule(new ConfigurationSettingsReader("autofac", configPath));
IContainer container = builder.Build();
IWhatever w = container.Resolve<IWhatever>();
Run Code Online (Sandbox Code Playgroud)
这是这样做的吗?
或者在单独的模块中包装Autofac更好吗?使用这种方法,我只需要注册一次模块(当应用程序启动时),并且可以使用包装的Autofac来解决依赖关系......
IWhatever w = container.Resolve<IWhatever>();
Run Code Online (Sandbox Code Playgroud)
我希望有人能告诉我使用Autofac的最佳方法.
谢谢!
c# ×3
.net ×1
architecture ×1
asp.net-mvc ×1
autofac ×1
mocking ×1
n-layer ×1
ninject ×1
structuremap ×1
unit-testing ×1