Hrv*_*udo 5 .net c# structuremap inversion-of-control
我有IRepository <T>,并实现了SqlRepository <T>.SqlRepository在构造函数中有DataContext参数.
SM配置如下所示:
x.ForRequestedType(typeof(IRepository<>))
.TheDefaultIsConcreteType(typeof(SqlRepository<>));
x.ForRequestedType<DataContext>().CacheBy(InstanceScope.Hybrid)
.TheDefault.Is.ConstructedBy(()=>{
var dc = new FirstDataContext();
dc.Log = new DebuggerWriter();
return dc;
});
Run Code Online (Sandbox Code Playgroud)
但是为了构建IRepository <SpecificObject>,我想注入不同的DataContext.我怎么说SM当我要求IReposiotry <SpecificObject>我想要不同的DataContext,而不是FirstDataContext而是SecondDataContext(DC转到不同的数据库).
例如,当我要求IRepository <T>时,我想要注入FirstDataContext,但是当我要求明确表示IRepository <Product>时,我想要注入SecondDataContext.
此外,SecondDC应该是由SM缓存的混合!
就像是...
ForRequestedType<DataContext>()
.CacheBy(InstanceScope.Hybrid)
.AddInstances(inst => inst.ConstructedBy(() =>
new SecondDataContext { Log = new DebuggerWriter() })
.WithName("secondDataContext"))
.TheDefault.Is
.ConstructedBy(() => new FirstDataContext {Log = new DebuggerWriter()});
ForRequestedType<IRepository<SpecificObject>>()
.TheDefault.Is
.OfConcreteType<SqlRepository<SpecificObject>>()
.CtorDependency<DataContext>()
.Is(inst => inst.TheInstanceNamed("secondDataContext"));
Run Code Online (Sandbox Code Playgroud)