Flo*_*uni 3 .net c# structuremap
我整天都在摸索着我的头脑,我找不到任何解决方案,所以我得到了帮助.听到我的问题:我有两个实现一个接口的类
public interface ICacheObject
{
string Get();
}
public class WebCacheObject : ICacheObject
{
public string Get()
{
return "Web";
}
}
public class SysteCacheObject : ICacheObject
{
public string Get()
{
return "System";
}
}
Run Code Online (Sandbox Code Playgroud)
所以在其他一些clase For Class in Class Test中,我需要注入WebCacheObject,并且在Test2中我必须注入SystemCacheObject.我在Initialize中做了这个:
ObjectFactory.Initialize(c =>{ c.For<IMessage>().Use<Message>();
c.For<ICacheObject>().ConditionallyUse(t =>{t.If(g => g.RequestedName == "HTTP")
.ThenIt.Is.ConstructedBy(
() =>
new WebCacheObject());
t.If(g =>g.RequestedName =="OtherCache")
.ThenIt.Is.ConstructedBy(
() =>
new SysteCacheObject
());
});
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何调用Test-s clase-s所以如果我这样调用条件是真的(或者如何改变条件,那么这将起作用)
ObjectFactory.GetInstance <'ITEST>()
测试Clase将在其他情况下使用WebCache SystemCache ???
对不起,我的英语不好.
我认为你应该避免使用if的条件构造语法 - 如果有更简单的替代方法.在你的情况下,我认为这将做:
For<ICacheStorage>().Use<NullObjectCache>();
For<Test>().Use<Test>.Ctor<ICacheStorage>().Is<HttpContextCacheAdapter>();
For<Test2>().Use<Test2>.Ctor<ICacheStorage>().Is<HttpContextCacheAdapter>();
Run Code Online (Sandbox Code Playgroud)