Настройка Unity с параметром и создание экземпляра сразу - PullRequest
0 голосов
/ 23 июня 2018

Я бы хотел передать myContext на Business и Facade. В Facade. Я хотел бы создать экземпляр Business с myContext в аргументе.

Я получил эту ошибку: Фасад не имеет конструктора, который принимает параметры (MyContext).

Я тоже пытался что-то подобное, но не работает:

public class Facade : IFacade
{
    readonly IBusiness business;
    readonly MyContext myContext;

    public Facade(MyContext context,IBusiness business)
    {
        this.myContext = context
        this.business = business;
    }
}

Мой текущий код:

public class Facade : IFacade
{
    readonly IBusiness business;

    public Facade(IBusiness business)
        => this.business = business;
}

public class Business : IBusiness
{
    readonly Idal dal;

    public Business(IDal dal)
        => this.dal = dal;
}

public static IUnityContainer Init(MyContext myContext)
{
    IUnityContainer container = new UnityContainer();

    container.RegisterType<IFacade, Facade>
        (new TransientLifetimeManager(), new InjectionConstructor(myContext));

    container.RegisterType<IBusiness, Business>
        (new TransientLifetimeManager(), new InjectionConstructor(myContext));

    return container;
}

1 Ответ

0 голосов
/ 24 июня 2018

Если я правильно понял ваш вопрос, вы ищете это

class Program
{
    static void Main(string[] args)
    {
        var context = new SomeClass() { SomeId = 10 };
        var container = ConfigureContainer(context);
        var facadeInstance = container.Resolve<IFacade>();
        Console.WriteLine(facadeInstance.ShowContextId());
    }

    public static IUnityContainer ConfigureContainer(SomeClass context)
    {
        IUnityContainer container = new UnityContainer();

        container.RegisterType<IFacade, Facade>(new TransientLifetimeManager(), new InjectionConstructor(new InjectionParameter(typeof(SomeClass), context)));

        return container;
    }
}

public interface IFacade
{
    int ShowContextId();
}

public class Facade : IFacade
{
    public readonly SomeClass _context;

    public Facade(SomeClass context)
    {
        _context = context;
    }

    public int ShowContextId() => _context?.SomeId ?? 0;
}

public class SomeClass
{
    public int SomeId { get; set; }
}
...