Einfache Injektor-property injection in Aktion filter

Den action filter möchte ich einzuspritzen, beginnt so

public class UserAuthorisation : AuthorizeAttribute
{
    public IWcfClientProxy<IAppFrameworkServiceChannel>
        FrameworkServiceProxy { get; set; }

Ich habe meine setup-container wie diese:

container.Register<IWcfClientProxy<IAppFrameworkServiceChannel>>(
    ()=> new WcfClientProxy<IAppFrameworkServiceChannel>());

container.RegisterInitializer<UserAuthorisation>(handler =>
{
    handler.FrameworkServiceProxy = container
       .GetInstance<IWcfClientProxy<IAppFrameworkServiceChannel>>();
});

Wenn ich diesen starte, die FrameworkServiceProxy - Eigenschaft ist null.

Habe ich diesen Beitrag gelesen: Einfache Injektor: Injektion einer Eigenschaft in einer Basisklasse und folgte die Antwort. Ich habe auch gelesen Beispiel auf dieser Seite Einfache Injektor-Dokumentation.

Ich bin nicht der Einspeisung in einer Basis-Klasse und vielleicht ist das das Problem?

## UPDATE ##

Ich bin das hinzufügen von mehr Informationen, wie ich denke, es sollte aus dem, was gesagt wurde Stevens Antwort.

Ich bin mit dem NuGet-Paket für MVC 3. Dies fügt die folgenden zur Anwendung:

public static class SimpleInjectorInitializer
{
    ///<summary>Initialize the container and register it as MVC3 Dependency Resolver.</summary>
    public static void Initialize()
    {
        var container = new Container();
        InitializeContainer(container);
        container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
        container.RegisterMvcAttributeFilterProvider();
        container.Verify();
        DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
    }

    private static void InitializeContainer(Container container)
    {
        container.Register<IWcfClientProxy<IAppFrameworkServiceChannel>>(() => new WcfClientProxy<IAppFrameworkServiceChannel>());
        container.RegisterInitializer<UserAuthorisation>(handler =>
            {
                handler.FrameworkServiceProxy = container.GetInstance<IWcfClientProxy<IAppFrameworkServiceChannel>>();
            });
    }

Dies beinhaltet die container.RegisterMvcAttributeFilterProvider(); dass ich, als ich jetzt verstehen, es sollte sich eine filter-Anbieter und sollte bedeuten, dass die Filter erstellt, durch den container (dieses Verständnis könnte falsch sein) und dann Eigenschaften sind automatisch wired-up.

Meinen filter registriert ist, in der Globalen.asax.cs etwa so:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new UserAuthorisation());
}

Scheint es mir, dass der filter nicht erstellt wird, durch den Behälter, so dass ich denke, ich muss etwas anderes tun zu bekommen, dass das passiert ?

  • Wie registrieren Sie Ihre UserAuthorisation? Tun Sie es hinzufügen, um GlobalFilters oder Einfache Injektor hat eine filterprovider?
  • Ich habe es über die globalen Filter, ist, dass, wo ich schief gelaufen?
  • Ja, es ist das problem. Wenn die UserAuthorisation ist nicht gelöst durch Einfache Injektor dann Einfach Injektor nicht wissen, über Ihre Filter also nicht die Eigenschaft der Injektion...
  • OK cool, willst du das in eine Antwort-vielleicht zeigt ein Beispiel für die einfache Injektor-filter-Anbieter, und ich werde es akzeptieren (auch wenn es funktioniert für mich 🙂 ).
InformationsquelleAutor David McLean | 2012-08-23
Schreibe einen Kommentar