Simple Injector中是否有任何方法可以在运行时将一种类型的默认值替换为Structure Map中的containter.Inject()
?我使用结构图借用code如下
var container = new Container(x => { x.For<IFoo>().Use<AFoo>(); });
container.GetInstance<IFoo>().ShouldBeOfType<AFoo>();
container.Configure(x => x.For<IFoo>().Use<BFoo>());
// The default of IFoo is now different
container.GetInstance<IFoo>().ShouldBeOfType<BFoo>();
// or use the Inject method that's just syntactical
// sugar for replacing the default of one type at a time
container.Inject<IFoo>(new CFoo());
container.GetInstance<IFoo>().ShouldBeOfType<CFoo>();
我的背景
注册容器
// bypass verify was removed for short
_container.Register<HttpContextBase>(() => new HttpContextWrapper(HttpContext.Current));
_container.Register(() => _container.GetInstance<HttpContextBase>().User.Identity);
我的服务
public class MyService : IMyService
{
public MyService(IIdentity identity)
{
//...
}
//...
}
我的应用没有问题。有效。但是在我的单元测试中(没有模拟的真实本地数据库),我想用登录用户替换IIdentity。我使用了结构图,它起作用了。现在我不知道如何使它适用于Simple Injector。
答案 0 :(得分:2)
但在我的单元测试中(没有模拟的真实本地数据库),我想用登录用户替换IIdentity。
您绝对可以使用不同的注册替换真正的IIdentity
注册以进行单元测试。您只需在从容器中解析之前执行此操作。
这意味着每个集成测试(我说'集成',因为单元测试不使用DI容器)应该得到它自己的Container
实例。其次,为了能够覆盖现有注册,您必须设置container.Options.AllowOverridingRegistrations
。有关详细信息,请阅读this。