Использование структуры getinstance в операторе linq со значениями инициализатора

Я не знаю, как спросить об этом, но я хочу создать новый объект в операторе linq и инициализировать его значения. Поскольку я должен использовать метод GetInstance StructureMap для получения экземпляра объекта, я не думаю, что это возможно. Я ошибся? И прежде чем мы отойдем от темы, я понимаю, что, вероятно, мог бы создать конструктор, который принимает значения, которые я хочу использовать, но я хочу знать, есть ли способ сделать это с помощью инициализаторов и карты структуры. Я действительно слаб в структуре карты, и, насколько я знаю, может быть простой способ, который я просто упускаю...

Спасибо за любые мысли.

// в основном, я создаю новый объект, когда у меня нет существующего для идентификатора группы // концептуально, это добавление пользователей в выбранные группы, если они еще не принадлежат g в идентификаторах групп, где !OriginalGroups. Exists(ug => ug.SecurityGroupID == g) select StructureMap.ObjectFactory.GetInstance() {//инициализировать значения usertosecuritygroup};

// вот как бы я это сделал, если бы не полагался на DI. из g в GroupID, где !OriginalGroups.Exists(ug => ug.SecurityGroupID == g) выберите новую UserToGroup {UserID = UserID, GroupID = g};


person john west    schedule 25.01.2010    source источник


Ответы (1)


Если вы начнете использовать цепочки методов, а не выражения LINQ, вы можете сделать что-то вроде этого:

    [TestFixture]
public class so_1
{
    public class UserToGroup
    {
        public int UserId { get; set; }
        public int GroupId { get; set; }
    }

    [Test]
    public void TEST()
    {
        var container = new Container();

        var groupIds = new int[] { 1,2,3,4,5};
        var originaGroups = new int[] { 4, 5 };

        var result = groupIds.Intersect(originaGroups).Select(group =>
        {
            var myClass = container.GetInstance<UserToGroup>();
            myClass.GroupId = group;
            return myClass;
        });

        result.First().GroupId.ShouldEqual(4);
        result.Skip(1).First().GroupId.ShouldEqual(5);
    }
}
person KevM    schedule 25.01.2010