Как указать метод в проекте, который будет выполняться внутри компонента библиотеки классов

В прошлом у меня был довольно много повторно используемого кода в моем проекте, который я хотел бы поместить в проект пользовательской библиотеки классов, чтобы другие проекты могли его повторно использовать. Есть только один фрагмент кода, который требует настройки в коде, который зависит от проекта.

Как я могу внедрить метод, который будет выполняться в моем проекте, внутри метода библиотеки классов? Я думал об использовании делегата, но открыт для предложений. Если у вас есть код, я не очень хорошо разбираюсь в делегатах, пожалуйста, опубликуйте его.


person Nyla Pareska    schedule 26.07.2010    source источник


Ответы (1)


Вы ищете различные способы достижения IOC /Внедрение зависимостей. Обычный способ - взять параметр, который реализует:

interface IDoSomething
{
   void DoSomething(string myParam);
}

class MyLibrary
{
    public void DoLibraryStuff(IDoSomething iDoSomething, string extraParam)
    { iDoSomething.DoSomething("info");... }
}

Если вы хотите использовать делегатов, вы можете использовать:

class MyLibrary
{
    public void DoLibraryStuff(Action<string> doSomething, string extraParam)
    { doSomething("info");... }
}

Использование:

new MyLibrary().DoLibraryStuff(info => Console.WriteLine(info), "extraParam");
person Yuriy Faktorovich    schedule 26.07.2010
comment
Выглядит интересно. Я посмотрю на это. Я не совсем знаком с IOC, но быстрый поиск в Google показал мне, что в .NET могут быть разные варианты, такие как Ninject и Unity. Что предпочтительнее? - person Nyla Pareska; 26.07.2010
comment
@Nyla Pareska: я не совсем уверен, но не думаю, что фреймворк — это то, что вам нужно в данном случае. Фреймворки кажутся более общими, чем то, что вы указали. Лично я предпочитаю PostSharp. - person Yuriy Faktorovich; 26.07.2010
comment
Я просто нахожусь на этапе тестирования, поэтому у меня есть вопросы, но в конечном итоге я надеюсь, что это станет чем-то вроде фреймворка. Также я просто изучаю или пытаюсь использовать некоторые методы .NET. - person Nyla Pareska; 26.07.2010
comment
Как я могу поместить параметры в метод DoSomething? Я не преуспеваю в этом. - person Nyla Pareska; 26.07.2010
comment
@Nyla Pareska: изменены обе версии с параметрами. - person Yuriy Faktorovich; 26.07.2010
comment
Спасибо, но я имею в виду передать параметр со стороны консольного приложения. Могу ли я указать, какой метод вызывать, потому что теперь кажется, что метод жестко запрограммирован в библиотеке. - person Nyla Pareska; 26.07.2010
comment
@Nyla Pareska, вы можете указать, какой метод вызывается, передав разные реализации класса интерфейса. - person Yuriy Faktorovich; 26.07.2010
comment
Я пытаюсь это сделать, но как тогда передать параметр? Через свойство класса, реализующего интерфейс? Извините, но я немного в растерянности здесь. - person Nyla Pareska; 26.07.2010
comment
@Nyla Pareska: я изменил, но я все еще не уверен, что у меня есть то, что вы ищете. Можете ли вы объяснить свой вариант использования немного подробнее. - person Yuriy Faktorovich; 26.07.2010
comment
Спасибо за вашу помощь и терпение со мной. Я не полностью понимаю код, особенно второй, но первое решение, похоже, работает для меня. - person Nyla Pareska; 26.07.2010