以下是我使用Asp.Net Mvc 3的设置:
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)**
}
}
已加星标的行会抛出错误,指出Cache为null。 我试图将基类注册为类型,但我想这是错误的。 我的Autofac设置如下:
builder.Register(r => new EmployeeProvider()).As<IEmployeeProvider>().InstancePerHttpRequest();
builder.Register(r => new MyCache()).As<ICache>().InstancePerHttpRequest();
builder.RegisterType<BaseProvider>().PropertiesAutowired();
我错过了什么?
答案 0 :(得分:1)
您应该使用EmployeeProvider
注册PropertiesAutowired()
,或者为从BaseProvider
继承的每个类扫描程序集。
第一次注册会忘记PropertiesAutowired()
,第三行会忘记EmployeeProvider
。