IoC решение для нереферентной зависимости - PullRequest
0 голосов
/ 12 июня 2011

Прямо сейчас у меня есть структура типа, подобная следующей

interface IFoo { }
class FooA : IFoo { }
class FooB : IFoo { }

//not a builder. generates based on conditions
interface IFooEmitter<TFoo> 
{
    TFoo EmitFoo(); 
} 

abstract class FooEmitterBase<TFoo> : IFooEmitter<TFoo> { }

class FooAEmitter : FooEmitterBase<FooA> { }

[RequiresEmitter(typeof(FooAEmitter))]
class FooBEmitter : FooEmitterBase<FooB> { }

Я хочу создать где-нибудь FooBEmitter ...

var b = FooEmitterManager.CreateAndStore<FooBEmitter>(); 

Create () видит атрибут RequEmitter наFooBEmitter и рекурсивно создает FooAEmitter.

//continued from above
var a = FooEmitterManager.CreateAndStore<FooAEmitter>();
Debug.Assert(a == b); // true

FooBEmitter НЕ классически зависит от (хранит ссылку на) FooAEmitter. Это зависит от

  • FooAEmitter, являющегосясозданный и сохраненный в FooEmitterManager
  • FooA, который FooAEmitter будет генерировать

Есть ли какой-то способ упростить создание этого типа с учетом зависимостей с помощью популярных контейнеров .NET IoC, таких как Castle или NInject?

1 Ответ

2 голосов
/ 13 июня 2011

Это, вероятно, то, что вы ищете для Ninject: https://github.com/ninject/ninject.extensions.dependencycreation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...