Подтвердить что ты не робот

Может ли контейнер объединения передавать ссылку на себя как параметр конструктора?

Есть ли способ, чтобы контейнер единства мог передать себя объекту?

то есть:.

public class Something {

     public Something(IUnityContainer container) {
           ...
     }
}
4b9b3361

Ответ 1

Короткий ответ - да.

Это следует передавать автоматически, когда вы используете методы Resolve.

Например:

IUnityContainer container = new UnityContainer();
var something = container.Resolve<Something>();

Кроме того, это тот же метод, который использует Prism (на CodePlex), если вы хотите изучить его.

Обновление с добавлением теста:

[TestClass]
public class Spike
{
    [TestMethod]
    public void unityTest()
    {
        var container = new UnityContainer();
        var something= container.Resolve<Something>();
        Assert.AreSame(container, something.Container);
        // This passes. Success.
    }
}

public class Something
{
    public Something(IUnityContainer container)
    {
        Container = container;
    }

    public IUnityContainer Container { get; set; }
}

Ответ 2

Первый ответ - это то, о чем я думал. Спасибо.

До Unity мы создали свой собственный контейнер IOC, и у нас есть синтаксис, похожий на...

<constructor>
    <param name="factory" value="[{factory}]"/>
</constructor>

[{factory}] заставляет его передавать себя как параметр.

Как установить его как статический: мне не нравится использовать этот подход, потому что каждый объект становится зависимым от единственного свойства (очевидно). Его менее многоразовое и менее проверяемое, особенно если статичность только для чтения (что и должно быть). Как только статический параметр установлен, вы не можете (или не должны быть в состоянии) вмешиваться в него, что ограничивает тестовые сценарии, которые вы можете создать.

Если ничего другого, то объекты должны по крайней мере иметь возможность принимать контейнер в качестве параметра. Если его там нет, тогда он может вернуться к статике.

Мы пошли по пути использования единственного экземпляра и в итоге все изменили. На мой взгляд, объекты должны быть более гибкими. Если потребитель объектов хочет иметь один экземпляр, который он передает своим объектам, это до потребителя. Но сам объект не должен этого требовать. С синтаксисом, показанным выше, его очень легко передать контейнер через график.

Спасибо за информацию.

Джей

Извини... новый парень. Теперь я вижу, что это был комментарий, а не ответ.

Ответ 3

Как упоминалось в bendewey, вы можете передать его, так как это объект, как и любой другой объект, но зачем его передавать?

У вас есть только один, почему бы не быть статическим свойством, доступ к которому может получить любой класс?