Как получить текущий IUnityContainer для регистрации большего количества типов - PullRequest
0 голосов
/ 10 мая 2018

У меня есть служба Windows, которая использует Microsoft Unity 2.1, обычно все типы регистрируются во время запуска службы. (Program.cs)

Существует также класс обслуживания Windows. Мне нужно получить доступ к текущему IUnityContainer в этом классе обслуживания, чтобы зарегистрировать тип.

Как мне получить доступ к IUnityContainer, чтобы я мог зарегистрировать больше типов?

1 Ответ

0 голосов
/ 10 мая 2018

Нет понятия Current IUnityContainer , поскольку вы можете иметь их несколько, хотя, по моему опыту, это очень редкая вещь, если вы не учитываете дочерние контейнеры.Однако есть несколько способов удержать контейнер.Вы можете сделать то, что предложено в этом ответе , сделав это на более высоком уровне, но я бы рекомендовал против этого.Я привык делать следующее:

В неосновных проектах я создаю статический класс, например:

static class UnityRegistrator
{
    public static void Register(IUnityContainer container)
    {
        // Whatever Registrations for types in this assembly.
        container.RegisterType<INamedClass, ClassLibrary2>(
            new InjectionConstructor(
                new ResolvedParameter<string>("Foo")));
    }
}

И в основном проекте, например, вваш program.cs:

class Program
{
    static void Main(string[] args)
    {
        var container = new UnityContainer();


        MyAssembly.UnityRegistrator.Register(container);

        var namedClass = container.Resolve<INamedClass>();
        namedClass.Whatever();
    }

    static void Register(IUnityContainer container)
    {
        // Whatever Registrations for types in this assembly.
        container.RegisterType<string>("Foo", "Bar");
    }
}
...