我正在使用active directory
来检索用户的应用。有时我需要处理应用程序,但AD无法使用。我使用包装类来检索AD用户。我想根据配置注入不同的类。我正在考虑使用appSetting来告诉我当前的配置并确定注入时使用的类型。是否可以在不使用Web.config转换的情况下获取当前配置?是否可以使用基于Web.config转换的Unity注入对象?你能推荐一种更好的方法吗?
[UPDATE]
我有一个用户存储库类,用于从AD加载用户。我只需要能够更改此存储库类的实现,以便在AD不可用时,我可以以不同的方式加载用户。这只会用于开发,生产将始终访问AD并检索用户。
答案 0 :(得分:2)
您可以使用预处理程序指令:
#if DEBUG
// register fake repository
#else
// register AD repository
#endif
答案 1 :(得分:0)
嗯,依赖注入非常强大,敏捷,并产生了一种关注点分离。您的方法中的缺陷将来自验证。你看,通过这种方法,你必须选择一个具体的实现。
那你怎么称呼那两个班?
public class LogToText : ILogger
{
public void LogMessage(string message) { }
}
public class LogToEvent : ILogger
{
public void LogMessage(string message) { }
}
您有这两种实现方式,但是当您将接口传递给:
时public class AD
{
public AD(ILogger logger) { }
}
所以问题是你认为你可以正确验证以有效地选择正确的实现。否则,依赖注入可能无法正常工作。我们并不完全了解其用途或目标,因此我们的建议可能并不真正有益。希望你明白我的意思,因为你必须看看你是否无法测试特定的方式。
答案 2 :(得分:0)
您可以使用抽象:
public interface IPersonService
{
IEnumerable<Person> Find(PersonSearchParameters searchParams);
Person GetByAccountName(string accountName);
[ETC...]
}
然后你的AD和开发都实现了这个界面。
为了简化操作,我建议使用StructureMap IoC,这样您就可以轻松完成:
x.For<IPersonService>.Use<ActiveDirectoryPersonService>(); //for production
或
x.For<IPersonService>.Use<MockPersonService>(); //for development
使用此功能时,您可以为instancce:
public class TestController : Controller
{
IPersonService _service;
public TestController(IPersonService service)
{
_service = service;
}
}
在这种情况下,我不建议使用XML文件进行配置,而是建议使用结构图的Fluent代码,在重构时更好,并避免因编译而导致错误输入。
StructureMap: http://structuremap.net
通过NuGET轻松安装