Как получить объекты в параметрах ядра Ninject, которые нужны в конструкторе для инициализации - PullRequest
0 голосов
/ 18 февраля 2011

Я использую как Ninject IoC.

Мой вопрос заключается в том, как извлечь объект, для которого требуется параметр в конструкторе.

Ниже пример кода:

//Interface for connection
public interface IConnection
{
    IDbConnection CurrentConnection { get; }
}

//Concret connection
public class MyConnection : IConnection
{
    public MyConnection(IDbConnection nativeConnection){  }
}

//Module ninject
class Module : NinjectModule
{
    public override void Load()
    {
        Bind<IConnection>().To<MyConnection>().InSingletonScope();
    }
}

//Native connection
var sqlConn = new SqlCeConnection();

//Ninject kernel
var ker = new StandardKernel(new Module());
return ker.Get<IConnection>(); //How can I pass as parameters to the constructor of class "MyConnection"??

1 Ответ

1 голос
/ 19 февраля 2011

Вы должны добавить / определить привязку для IDbConnection. Затем Ninject автоматически передаст это конструктору. Например

Bind<IDbConnection>.To<SqlCeConnection>();

Или вы можете иметь постоянную в вашем модуле

private static readonly SqlConnection = new SqlCeConnection();

А затем привязать интерфейс к этому

Bind<IDbConnection>.ToConstant(SqlConnection);

Лучшая проверка Эта страница для получения дополнительной информации.

Обновление

Я не думаю, что это очень сложный дизайн. Но если вы хотите, вы можете напрямую передать параметр конструктору.

ker.Get<IConnection>(new ConstructorArgument("nativeConnection",yourConnection));

Я не знаю, зачем вам это нужно, и как оно работает в одноэлементном объеме.

...