Могу ли я использовать свой проект Ninject .NET в Orchard CMS?
Я создаю веб-сайт с использованием Orchard CMS, и у меня есть внешний проект .NET, написанный с использованием Ninject для внедрения зависимостей, который я хотел бы использовать вместе с модулем в Orchard CMS. Я знаю, что Orchard использует Autofac для внедрения зависимостей, и это вызывает у меня проблемы, так как я никогда раньше не работал с DI.
Я создал модуль Autofac,UserModule
, который регистрирует источник,UserRegistrationSource
, как это:
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 конструктор
public EFMembershipManager(ServerRepository db,
ServerRepositoryMembershipProvider membershipProvider,
string testUsername,
string serverUsername)
{
...
}
EFMembershipManager
класс из внешнего проекта, который использует Ninject для DI и используетServerRepository
а такжеServerRepositoryMembershipProvider
кого также вводят с помощью Ninject.
И теперь я застрял ...
ДолженUserRegistrationSource
возьмите контейнер Ninject (ядро) в качестве аргумента конструктора и попытайтесь найтиIUserServices
обслуживать, а затем передавать разрешения для ядра Ninject и возвращать пустое Enumerable, чтобы Autofac не пытался разрешить что-либо, связанное сIUserServices
или это неправильный подход?