Kann ich mein Ninject .NET-Projekt in Orchard CMS verwenden?

Ich erstelle eine Website mit Orchard CMS und habe ein externes .NET-Projekt mit Ninject für die Abhängigkeitsinjektion geschrieben, das ich zusammen mit einem Modul in Orchard CMS verwenden möchte. Ich weiß, dass Orchard Autofac für die Abhängigkeitsinjektion verwendet und dies bereitet mir Probleme, da ich noch nie zuvor mit DI gearbeitet habe.

Ich habe ein Autofac-Modul erstellt,UserModule, der die a-Quelle registriert,UserRegistrationSource, so was:

UserModule.cs

public class UserModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterSource(new UserRegistrationSource());
    }
}

UserRegistrationSource.cs

public class UserRegistrationSource : IRegistrationSource
{
    public bool IsAdapterForIndividualComponents
    {
        get { return false; }
    }

    public IEnumerable<IComponentRegistration> RegistrationsFor(Service service, Func<Service, IEnumerable<IComponentRegistration>> registrationAccessor)
    {
        var serviceWithType = service as IServiceWithType;
        if (serviceWithType == null)
            yield break;

        var serviceType = serviceWithType.ServiceType;
        if (!serviceType.IsInterface || !typeof(IUserServices).IsAssignableFrom(serviceType) || serviceType != typeof(IUserServices))
            yield break;

        var registrationBuilder = // something...

        yield return registrationBuilder.CreateRegistration();
    }
}

UserServices.cs

public interface IUserServices : IDependency
{
    void Add(string email, string password);
}

public class UserServices : IUserServices
{
    private readonly EFMembershipManager _manager;

    public UserServices(EFMembershipManager manager)
    {
        _manager = manager;
    }

    public void Add(string email, string password)
    {
        _manager.createUser(email, password);
    }
}

EFMembershipManager.cs Konstrukteur

public EFMembershipManager(ServerRepository db,
                           ServerRepositoryMembershipProvider membershipProvider,
                           string testUsername,
                           string serverUsername)
{
...
}

EFMembershipManager ist eine Klasse aus dem externen Projekt, die Ninject für DIs verwendet und verwendetServerRepository undServerRepositoryMembershipProvider die auch mit Ninject injiziert werden.

Und jetzt stecke ich fest ...

SollteUserRegistrationSource Nehmen Sie den Ninject-Container (Kernel) als Konstruktorargument und versuchen Sie, den zu findenIUserServices Warten Sie und vermitteln Sie dann die Auflösungen an den Ninject-Kernel und geben Sie ein leeres Enumerable zurück, damit Autofac nicht versucht, irgendetwas in Bezug auf zu lösenIUserServices oder ist das der falsche ansatz

Antworten auf die Frage(1)

Ihre Antwort auf die Frage