【发布时间】:2016-09-02 00:57:57
【问题描述】:
我在使用自定义操作过滤器和依赖注入时遇到问题。这是我的代码:
PageCount.cs
public class PageCount : ActionFilterAttribute
{
[Dependency]
public IVisitorService _visitorService { get; set; }
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
_visitorService.AddVisitorCount();
base.OnResultExecuted(filterContext);
}
}
IVisitorService.cs
public partial interface IVisitorService
{
int GetVisitorsCount();
void AddVisitorCount();
}
VisitorService.cs
public partial class VisitorService : IVisitorService
{
private readonly IRepository<Visitor> _visitorRepository;
public VisitorService(IRepository<Visitor> visitorRepository)
{
_visitorRepository = visitorRepository;
}
public int GetVisitorsCount()
{
Visitor v = _visitorRepository.Get(1);
return v.VisitCount;
}
public void AddVisitorCount()
{
Visitor v = _visitorRepository.Get(1);
v.VisitCount += 1;
_visitorRepository.Update(v);
}
}
UnityConfig.cs
public static void RegisterComponents()
{
var container = new UnityContainer();
// identity
container.RegisterType<DbContext, ApplicationDbContext>(new HierarchicalLifetimeManager());
container.RegisterType<UserManager<ApplicationUser>>(new HierarchicalLifetimeManager());
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new InjectionConstructor(new ApplicationDbContext()));
container.RegisterType<AccountController>(new InjectionConstructor());
container.RegisterType<IAuthenticationManager>(new InjectionFactory( o => HttpContext.Current.GetOwinContext().Authentication));
container.RegisterType(typeof(IRepository<>), typeof(Repository<>));
container.RegisterType<IGameService, GameService>();
container.RegisterType<IGenreService, GenreService>();
container.RegisterType<IVisitorService, VisitorService>();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
UnityMvcActivator.cs
public static void Start()
{
var container = UnityConfig.GetConfiguredContainer();
FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
// TODO: Uncomment if you want to use PerRequestLifetimeManager
// Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
}
错误
当前类型, GameCommerce.Infrastructure.Services.Visitors.IVisitorService,是一个 接口,无法构造。您是否缺少类型映射?
【问题讨论】:
标签: c# asp.net-mvc dependency-injection unity-container