2016-04-28 9 views
0

Я создаю статический класс Util в проекте библиотеки для определения общего метода в проекте asp.net mvc 5, я использую structmap.mvc5 , но он не инициализирует установку IService статическим свойством, я объявляю в статическом классе. Спасибо за помощь:Setter Property Injection не работает в статическом классе, используя ASP.NET MVC 5 и Structuremap

Config класса IoC:

public static class IoC { 
    public static IContainer Initialize() { 
     ObjectFactory.Initialize(x => 
     { 
      //Standard registration 
      x.For<IStudentRepository>().Use<StudentRepository>(); 
      x.For<IStudentService>().Use<StudentService>(); 
      x.For<IApplicationSettings>().Use<WebConfigApplicationSettings>(); 
      x.For<IAuthProvider>().Use<FormsAuthProvider>(); 
      //Setter injection 
      x.Policies.FillAllPropertiesOfType<IStudentService>().Use<StudentService>(); 
      x.Policies.SetAllProperties(prop => 
      { 
       prop.OfType<IStudentService>(); 
      }); 

     });    
     return ObjectFactory.Container;    
    } 
} 

Класс Util:

public static class Util 
{  
    private static IStudentService _studentService; 

    public static IQueryable<User> GetAllStudents() 
    { 
     return _studentService.GetAllStudents(); 
    } 

    public static T ParseEnum<T>(string value) 
    { 
     return (T)Enum.Parse(typeof(T), value, true); 
    } 

    public static List<PermissionType> GetAllPermissionByUserID(int userID) 
    { 
     return _studentService.GetAllPermissionByUserID(userID); 
    } 

    public static bool IsAuthentication(string user, string password) 
    { 
     return _studentService.IsAuthentication(user,password); 
    } 
    public static User FindUserByUsername(string username) 
    { 
     return _studentService.FindUserByUsername(username); 
    } 
} 

Ошибка Страница: enter image description here

+0

Почему вы устанавливаете класс Util статичным? –

+0

@ Linh Tuan: Потому что я называю класс Util в любом месте решения и не инициализирую объект из класса. –

+0

Эта проблема «_studentService» неинициализирована –

ответ

1

Вы не инициализирует _studentService, так что вы должны сделай это. для создания нового экземпляра studentService вы можете использовать ServiceLocator или недвижимость сеттер

Попробуйте это:

public static Util 
{ 
    _studentService=ObjectFactory.Container.GetInstance<StudentService>(); 
} 

и сеттер инъекций использовать это:

[SetterProperty] 
public IStudentService StudentService{get;set;} 

, но я не уверен, свойство setter в статическом классе.