我整天都在摸索着我的头脑,我找不到任何解决方案,所以我得到了帮助。听到我的问题:我有两个实现一个接口的类
public interface ICacheObject
{
string Get();
}
public class WebCacheObject : ICacheObject
{
public string Get()
{
return "Web";
}
}
public class SysteCacheObject : ICacheObject
{
public string Get()
{
return "System";
}
}
所以在其他一些文章中,在类测试中我需要注入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
());
});
但是我不知道如何调用Test-s clase-s所以如果我这样调用条件是真的(或者如何改变条件以便这样做)
ObjectFactory.GetInstance&LT;'ITEST&GT;()
Test Clase将在其他情况下使用WebCache SystemCache ???
抱歉我的英语不好。
答案 0 :(得分:6)
我认为你应该避免使用if的条件构造语法 - 如果有更简单的替代方法。在你的情况下,我认为这样做:
For<ICacheStorage>().Use<NullObjectCache>();
For<Test>().Use<Test>.Ctor<ICacheStorage>().Is<HttpContextCacheAdapter>();
For<Test2>().Use<Test2>.Ctor<ICacheStorage>().Is<HttpContextCacheAdapter>();
答案 1 :(得分:2)
谢谢我确实找到了解决方案,如果你们其中一个人听到的是它(我确实改变了一些条件并正在工作):
x.For<ICacheStorage>().ConditionallyUse(c =>
{
c.If(t => t.ParentType == typeof(Test) ||
t.ParentType == typeof(Test2))
.ThenIt
.Is.ConstructedBy(
by => new HttpContextCacheAdapter());
c.TheDefault.Is.ConstructedBy(
by => new NullObjectCache());
});
抱歉我的英文不好