Как вы можете ввести поставщика членства ASP.NET (MVC2) с использованием NINCET?

StackOverflow https://stackoverflow.com/questions/2963611

Вопрос

Итак, я работал над этим часами. Я нашел здесь пару постов, но ничего, что на самом деле решает проблему. Итак, позвольте мне попробовать еще раз ...

У меня есть приложение MVC2 с использованием Ninject и пользовательского поставщика членства.

Если я попытаюсь внедрить поставщика, используя CTOR, я получаю ошибку: «Ни один конструктор без параметра не определен для этого объекта».

public class MyMembershipProvider : MembershipProvider
{
    IMyRepository _repository;

    public MyMembershipProvider(IMyRepository repository)
    {
        _repository = repository;
    }

Я также играл с заводами и инициализированным (), но все идет за пробелами.

Есть мысли/примеры?

Это было полезно?

Решение

Вот как я смог это сделать:

1) Я создал статический вспомогательный класс для Ninject

public static class NinjectHelper
{
    public static readonly IKernel Kernel = new StandardKernel(new FooServices());

    private class FooServices : NinjectModule
    {
        public override void Load()
        {
            Bind<IFooRepository>()
                .To<EntityFooRepository>()
                .WithConstructorArgument("connectionString",
                    ConfigurationManager.ConnectionStrings["FooDb"].ConnectionString);
        }
    }
}

2) Вот мое членство отменяет:

    public class FooMembershipProvider : MembershipProvider
    {
        private IFooRepository _FooRepository;

        public FooMembershipProvider()
        {
            NinjectHelper.Kernel.Inject(this);
        }

        [Inject]
        public IFooRepository Repository 
        { 
            set
            {
                _FooRepository = value;
            }
        }
        ...

При таком подходе не имеет значения, когда поставщик членов создается экземпляр.

Другие советы

Модель поставщика членства может создать создание поставщика только тогда, когда у него есть конструктор по умолчанию. Вы можете попробовать это, используя шаблон локатора сервиса, вместо использования впрыска зависимостей. Пример:

public class MyMembershipProvider : MembershipProvider
{
    IMyRepository _repository;

    public MyMembershipProvider()
    {
        // This example uses the Common Service Locator as IoC facade, but
        // you can change this to call NInject directly if you wish.
        _repository = ServiceLocator.Current.GetInstance<IMyRepository>;
    }

У меня была та же проблема в том же месте в книге. Лишь позже в книге я заметил, что были два отдельных файла Web.Config. Первоначально я поместил свой ключ ConnectionString в неправильный файл web.config. Только когда я разместил ConnectionString в правильном файле web.config, ошибка «без параметра -конструктора» исчезла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top