S>Но в реальной жизни, сам контейнер требуется в разных методах и даже в разных классах.
S>Необходимо самому создавать синглтон для контейнера, или Unity имеет свой механизм?
Два пути:
1) Создать синглтон. Я, например, делал статический класс вроде этого
| Скрытый текст |
| public static class DI
{
private static IUnityContainer Container { get; set; }
static DI()
{
Container = new StubContainer();
}
///<summary>
///</summary>
public static void RegisterContainer(IUnityContainer newContainer)
{
Container = newContainer;
}
///<summary>
///</summary>
public static void Register<TFrom, TTo>() where TTo : TFrom
{
Container.RegisterType<TFrom, TTo>();
}
///<summary>
///</summary>
public static void RegisterAsSingleton<TFrom, TTo>() where TTo : TFrom
{
Container.RegisterType<TFrom, TTo>(new ContainerControlledLifetimeManager());
}
///<summary>
///</summary>
public static void Register<TFrom>(TFrom instance)
{
Container.RegisterInstance(instance);
}
///<summary>
///</summary>
public static T Resolve<T>()
{
return Container.Resolve<T>();
}
///<summary>
///</summary>
public static object Resolve(Type t)
{
return Container.Resolve(t);
}
///<summary>
///</summary>
public static T Resolve<T>(string name)
{
return Container.Resolve<T>(name);
}
///<summary>
///</summary>
public static void BuildUp<T>(T item)
{
Container.BuildUp(item);
}
}
|
| |
2) передавать контейнер в каждый класс.
Второй подход мне кажется более кошерным, но и использовать его сложнее.