2016-08-17 2 views
0

У меня есть приложение MVC use Unity Ioc.Использовать сервис в классе MVC с Unity Ioc

Declare и инициализация служба:

public static void Initialize() 
{ 
    IUnityContainer container = BuildUnityContainer(); 
    DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
} 
private static IUnityContainer BuildUnityContainer() 
{ 
    IUnityContainer container = new UnityContainer(); 
    container.RegisterType<ImyService, myService>(new HttpContextLifetimeManager<ImyService>());; 
    return container; 
} 

В классе я использую код ниже:

var service = DependencyResolver.Current.GetService<ImyService>(); 

Это файл UnityControllerFactory.cs

public override object GetValue() 
{ 
    var assemblyQualifiedName = typeof(T).AssemblyQualifiedName; 
    if (assemblyQualifiedName != null) 
     return HttpContext.Current.Items[assemblyQualifiedName]; 
    return null; 
} 

Когда я запущенное приложение, он возвращает ошибку: HttpContex t.Current.Items [assemblyQualifiedName];

Ошибка:

Additional information: Object reference not set to an instance of an object.

Как я могу использовать услугу в моем классе. Благодаря!

+0

Случается ли такое же, если вы вводите службу в конструктор класса? – JB06

+0

@ JB06 когда я использую в контроллере, он работает, а не какая-либо ошибка. Используйте только в классе, это будет ошибка выше –

ответ

0

Проблема в том, что HTTPContext имеет значение null при использовании из класса (или библиотеки классов), как вы пытаетесь сделать. Это потому, что нет запроса на работу. Когда вы используете его с контроллера, все работает, потому что контроллер попадает как часть запроса, поэтому вы там золотые.

Вы можете обновить свой класс Factory UnityController и передать необходимые данные HTTPContext в качестве параметра, а затем использовать его, когда вам нужно. Это немного усложняет ситуацию.

Обратите внимание: вам, скорее всего, не нужно передавать весь объект HTTPContext, просто передайте минимум, с которым вы можете уйти.

+0

Спасибо @ Andrei Dragotoniu. Извините, но я не понимаю вашего распознавателя, вы можете предоставить мне образец кода. –