Ich habe ein Problem mit benutzerdefinierten Aktionsfiltern und Abhängigkeitsinjektionen. Hier ist mein Code:Abhängigkeitsinjektion für benutzerdefinierten ActionFilter mit Unity.MVC
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));
}
Fehler
Der aktuelle Typ GameCommerce.Infrastructure.Services.Visitors.IVisitorService ist eine -Schnittstelle und kann nicht erstellt werden. Vermissen Sie ein Typ-Mapping?
danke. für die Antwort, aber es wirft Nullbezug. ** "Objektreferenz wurde nicht auf eine Instanz eines Objekts gesetzt." ** von diesem Methodenaufruf ** _ visitorService.AddVisitorCount(); ** on PageCount.cs – markoverflow
Eine Nullreferenzausnahme bedeutet, dass Ihre Abhängigkeiten jetzt ordnungsgemäß aufgelöst werden. Können Sie debuggen und sehen, was null ist? Ist '_visitorService' null? Ist das _visitorRepository innerhalb der Methode 'AddVisitorCount()' null? Oder gibt '_visitorRepository' in der' AddVisitorCount() 'Methode einen Null' Visitor' zurück? –
@Correy Smith Hallo, ich füge den Haltepunkt in der ** VisitorService.cs **, die Konstruktoren und andere Sachen funktioniert gut, bis der Schritt zu erreichen ** öffentliche IVisitorService _visitorService {bekommen; einstellen; } **. Das Feld ** _ visitorService ** ist null. – markoverflow