2016-06-26 10 views
11

Dobrze, używam Visual Studio 2015 CE, zaktualizuj 2. Jeden produktywność Hack zazwyczaj robię to, że tworzę pustych klas modeli jak:Zapobiec Visual Studio z ograniczeniem metody setter do wewnętrznej

public class PersonModel 
{ 
} 

a następnie wykorzystać je w wybranej wypowiedzi jak:

db.People.Where(p => someCondition) 
.Select(p => new PersonModel 
{ 
    Id = p.Id, 
    Name = p.Name, 
    //set other properties 
}).ToList(); 

Potem idę do jeszcze nieistniejących właściwości Id i Name ... i naciśnij Control+. zapytać visual studio do generate property Id dla mnie. Wszystko świetnie, ale będzie on tworzyć:

public int Id { get; internal set; } 

i jeśli mogę użyć tej samej metody w modelu asp.net WebAPI wiązania, wiązanie zawiedzie milczeniu i dać mi Id = 0.

Więc moje pytanie brzmi: czy istnieje możliwość zapytać VS stworzyć setter publicznych, tj .:

public int Id { get; set; } 

Odpowiedz

3

się on modyfikator dostępu do internal ponieważ bazują na aktualnym kodem jest odpowiedni jeden. W twoim przypadku odwołujesz się do utworzonej właściwości tylko wewnątrz tego samego zestawu, więc najbardziej odpowiedni jest modyfikator dostępu internal. Nie sądzę, że możesz zmodyfikować to zachowanie.

Jeśli użyjesz Resharpera, stworzysz dla ciebie osobę publiczną. Innym obejściem jest przeniesienie klas, które chcesz, aby to zachowanie było przeznaczone dla innego zespołu.

+0

Dzięki za wyjaśnienie przyczyn zachowania. Naprawdę mam nadzieję, że istnieje obejście tego, że woli 'publiczne' od' wewnętrznego' – Alireza

+2

Nie jest dla mnie jasne, co to znaczy "ponieważ w oparciu o aktualny kod jest odpowiedni", w każdym razie, jeśli klasa jest 'Serializowalna' wewnętrzna dostępność nie pozwala na właściwą inicjalizację: 'XmlSerializer' rzuca wyjątek, ponieważ nie może uzyskać dostępu do ustawiacza. Co więcej, nie sugeruję utworzenia kolejnego zestawu w celu uniknięcia anulowania 'internal'. Byłoby miło mieć sposób na zmianę tego zachowania, –

+0

@AngeloMascaro Jest obsługiwany przez wiązanie modelu asp.net mvc (lub web-api). Cicho ignoruje wewnętrzny ustawnik. – Alireza

Powiązane problemy