2012-02-15 6 views
1

Вот моя установка с ASP.NET MVC 3:autofac BaseClass свойство равно нулю

public abstract class BaseProvider 
{ 
    protected ICache Cache; 
} 

public interface ICache 
{ 
    void Add(string key, object data); 
    void Remove(string key); 
    ... 
} 

public class MyCache : ICache 
{ 
    private static MemoryCache cache = MemoryCache.Default; 
    void Add(string key, object data) 
    { 
    ... 
    } 
} 

public interface IEmployeeProvider 
{ 
    IEnumerable<Employee> GetEmployees(string department); 
} 

public class EmployeeProvider:BaseProvider,IEmployeeProvider 
{ 
    public IEnumerable<Employee> GetEmployees(string department) 
    { 
     **if (Cache.Get("employees_"+department)!=null)** 

    } 
} 

Помеченные линия выдает ошибку о том, что кэш является недействительным. Я попытался зарегистрировать базовый класс как тип, но, я думаю, это неправильно. установка Мои Autofac как это:

builder.Register(r => new EmployeeProvider()).As<IEmployeeProvider>().InstancePerHttpRequest(); 
builder.Register(r => new MyCache()).As<ICache>().InstancePerHttpRequest(); 
builder.RegisterType<BaseProvider>().PropertiesAutowired(); 

Что мне не хватает?

ответ

1

Вы должны либо зарегистрировать EmployeeProvider с помощью PropertiesAutowired(), либо просмотреть сборку для каждого класса, которая наследуется от BaseProvider.

Первая регистрация заберет PropertiesAutowired(), третья строка забудет EmployeeProvider.