Я пытаюсь минимизировать область контекста соединения с платформой сущностей, используя «использование», в то время как в то же время я хочу иметь возможность внедрить контекст в мой класс.
Я искал в интернете, но не нашел дела, похожего на мое, или я просто делаю что-то не так, в любом случае вот код:
[TestFixture]
public class Dummy
{
private IFoo ifoo;
[Test]
public void CreateIfNotExist()
{
using (var foo = GetNewIFoo())
{
foo.Dosomething();
}
Assert.IsNull(ifoo);//test fail here
}
[Test]
public void NotCreateIfExist()
{
ifoo = new Bar();
using (var foo = GetNewIFoo())
{
foo.Dosomething();
}
Assert.IsNull(ifoo);//test fail here
}
private IFoo GetNewIFoo()
{
if (ifoo == null)
{
ifoo = new Foo();//return new Foo();
}
return ifoo;
}
}
первый тест не пройден, с созданной последовательностью объектов foo-> foo do что-то-> foo disposed (вызывается с помощью on foo), тогда как переменная состояния ifoo по-прежнему имеет тип Foo ().
Второй тест не пройден, последовательность жизни объекта такая же, как и раньше.
Я запутался, так как думал, что GetNewIFoo () вернет ссылку на ifoo, а использование ключевого слова просто вызовет dispose для ifoo?
Кроме того, есть ли хороший способ контролировать контекстную область, сохраняя при этом возможность внедрения IContext?