Microsoft Unity, параметры в конструкторе - PullRequest
3 голосов
/ 08 апреля 2010

Я использую Unity с MVC и NHibernate. К сожалению, наш UnitOfWork находится в другом .dll и не имеет пустого .ctor по умолчанию. Это то, что я делаю, чтобы зарегистрировать NHibernate:

var connectionString = ConfigurationManager.ConnectionStrings
    ["jobManagerConnection"].ConnectionString;
var assemblyMap = ConfigurationManager.AppSettings["assemblyMap"];
container.RegisterType<IUnitOfWork, UnitOfWork>(
    new ContainerControlledLifetimeManager());

В моем WebController у меня есть это:

/// <summary>Gets or sets UnitOfWork.</summary>
[Dependency]
public IUnitOfWork UnitOfWork { get; set; }

Проблема в том, что конструктор UnitOfWork ожидает 2 обязательные строки. Как я могу настроить RegisterType для этого интерфейса, чтобы передать два параметра, полученные из web.config? Возможно ли это?

Ответы [ 2 ]

4 голосов
/ 08 апреля 2010

Что-то вроде этого должно сделать это:

var connectionString = ConfigurationManager.ConnectionStrings
    ["jobManagerConnection"].ConnectionString;
var assemblyMap = ConfigurationManager.AppSettings["assemblyMap"];

container.RegisterType<IUnitOfWork, UnitOfWork>(
    new InjectionConstructor(connectionString, assemblyMap),
    new ContainerControlledLifetimeManager());
1 голос
/ 08 апреля 2010

Проще, чем я, хотя:

        var connectionString = ConfigurationManager.ConnectionStrings["jobManagerConnection"].ConnectionString;
        var assemblyMap = ConfigurationManager.AppSettings["assemblyMap"];
        container
            .RegisterType<IUnitOfWork, UnitOfWork>(new ContainerControlledLifetimeManager())
            .Configure<InjectedMembers>()
            .ConfigureInjectionFor<UnitOfWork>(new InjectionConstructor(connectionString, assemblyMap));
...